我无法通过对象运算符(->
)访问类的常量。
我有这两个班级:
class withConstant {
const MY_CONSTANT = 5;
}
class usingConstant {
public $class = null;
function __construct() {
$this->class = new withConstant();
}
}
当我这样做时:
$myClass = new usingConstant();
echo $myClass->class::MY_CONSTANT;
我收到错误Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)
。但是,我可以解决这个问题:
$myClass = new usingConstant();
$myClass = &$myClass->class;
echo $myClass::MY_CONSTANT;
我更喜欢先访问常量而不先将成员变量赋值给另一个变量。
答案 0 :(得分:1)
您可以在withConstant
中创建一个getter函数并调用它。
class withConstant {
const MY_CONSTANT = 5;
function getConstant(){
return self::MY_CONSTANT;
}
}
然后你可以调用那个函数:
$myClass = new usingConstant();
echo $myClass->class->getConstant();
答案 1 :(得分:1)
这是我能够在不幸的事实之后得到的最接近的事情:
echo constant(get_class($myClass->class).'::MY_CONSTANT');
请注意,这是非常低效的,因为它查找类以确定它的名称,然后再次查找它以引用常量。