PHP中如何通过变量调用类常量?报未声明静态属性错误
PHP动态访问类常量的问题解答
你当前的调用方式不可行,核心问题是混淆了类常量与静态属性的访问语法:
- 类常量通过
const声明,必须用类名::常量名的语法访问; - 你写的
Reason::$variable是静态属性的访问写法,但你的Reason类中并未定义名为$variable的静态属性,因此触发“Access to undeclared static property”错误。
如果需要通过变量动态访问类常量,有两种正确实现方式:
方式一:使用constant()函数
use App\Model\Enum\Reason; // 变量值需为目标常量的名称,比如要访问REASON常量 $variable = 'REASON'; echo constant(Reason::class . '::' . $variable);
方式二:借助反射类ReflectionClass
use App\Model\Enum\Reason; use ReflectionClass; $variable = 'REASON'; $reflection = new ReflectionClass(Reason::class); echo $reflection->getConstant($variable);
注意:你代码中$variable = 'variable'的取值是'variable',但Reason类里不存在名为VARIABLE的常量,所以即使改用正确方式,也会找不到对应常量。需要将$variable的值改为实际要访问的常量名,比如'REASON'、'ALL'或'TYPE'。
内容的提问来源于stack exchange,提问作者Zegert
相关产品推荐
相关产品推荐

