第 4 章 · 面向对象 · 第 4.3 课
静态成员、常量与枚举
静态成员
普通属性属于每个对象,静态(static)属性属于类本身,所有对象共享一份。静态方法不需要 new 就能调用,写法是 类名::方法()。在类的内部用 self:: 访问自己的静态成员。
类常量用 const 定义,同样通过 类名::常量名 访问。
静态方法里没有 $this,因为它不属于任何一个对象。
枚举 enum(PHP 8.1)
当一个值只能是固定的几种之一时(订单状态、星期、颜色……),用枚举比用字符串安全得多:写错一个字母,PHP 会直接报错,而不是悄悄出 bug。
带值的枚举(backed enum)给每个 case 绑定一个字符串或整数,方便存数据库。from() 根据值找到 case,找不到会报错;tryFrom() 找不到时返回 null。枚举里也可以写方法。
readonly 属性(PHP 8.1)
readonly 属性只能在初始化时赋值一次,之后谁都改不了。适合 id、创建时间这类“一旦确定就不该变”的数据。
选择题
在 static 方法里能使用 $this 吗?
练习 1
风险等级
已通过写一个带整数值的枚举 Level:
- 三个 case:
Low = 1、Medium = 2、High = 3 - 方法
label():分别返回"低"、"中"、"高" - 静态方法
fromScore(int $score): self:80 分及以上返回High,50 分及以上返回Medium,其余返回Low
练习 2
编号生成器
已通过写一个类 IdGenerator,它的静态方法 next() 每调用一次,依次返回 "ID-1"、"ID-2"、"ID-3"……