如何通过静态方法访问PHP枚举的value属性?
问题分析与解决方案
错误原因
你遇到的致命错误根源在于:调用Titular::minimus::int()时,int()是静态方法,此时self指向的是Titular枚举类本身,而value是每个枚举case实例的专属属性,并非枚举类的常量,因此self::value会触发未定义常量的错误。
正确实现方案
最符合PHP枚举设计逻辑的方案是将Trait中的int()改为实例方法,通过$this访问当前枚举case的value属性:
修改后的完整代码
trait Accessor { public function int(): int { return $this->value; } } enum Titular: int { use Accessor; case minimus = 1; case maximus = 2; }
调用方式
由于枚举case是实例对象,需使用->调用实例方法:
echo Titular::minimus->int(); // 输出 1 echo Titular::maximus->int(); // 输出 2
关于静态方法的补充说明
如果坚持想用::调用,实际上不符合PHP枚举的设计逻辑——静态方法属于枚举类,无法直接关联到具体的case实例,因此没有简洁且合理的实现方式。上述实例方法的方案是最优选择。
内容的提问来源于stack exchange,提问作者John Miller
相关产品推荐
相关产品推荐

