通过类成员变量处理类常量

时间:2014-05-30 15:48:14

标签: php oop

我无法通过对象运算符(->)访问类的常量。

我有这两个班级:

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;

我更喜欢先访问常量而不先将成员变量赋值给另一个变量。

2 个答案:

答案 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');

请注意,这是非常低效的,因为它查找类以确定它的名称,然后再次查找它以引用常量。