PHP - 在另一个对象中访问对象const

时间:2014-05-10 16:26:08

标签: php class oop scope constants

我有简单的示例代码,我希望将对象运算符与作用域分辨率一起使用以获得类常量(PHP 5.5)。

<?php


class A {
    const MY_CONST = 'This is my const';
}

class B {

    private $property;

    public function __construct(A $a) {    
        $this->property = $a;

        echo $a::MY_CONST."<br />"; // works (1)

        echo A::MY_CONST."<br />"; // works (2)

        $obj = $this->property;

        echo $obj::MY_CONST."<br />"; // works (3)

        echo $this->property::MY_CONST; // doesn't work (4)               
    }

}

$b = new B(new A);

代码在PHP 5.5.12中测试,我不关心在这个问题中与早期PHP版本的兼容性。

问题 - 如果将对象设置为(4)中的其他类的属性,并且您希望将$ this与const name一起使用,则是否可以访问对象const。 1和2显然是有效的,3中的简单分配也可以工作但是可以增加一条线。

如果不可能有任何理由否认它或简单的PHP开发人员决定如此或简单忘记使其正常工作?对我来说很奇怪,4不工作,但3工作没有任何问题

1 个答案:

答案 0 :(得分:1)

你的问题的答案是:是的,这是可能的。但是以三种方式之一:

$tmp = $this->property;
return $tmp::MY_CONST;

或者,IMO,更直观:

$class = get_class($this->property);
return $class::MY_CONST;

另一种方法是:

$r = new RefletionClass($this->property);
return $r->getConstant('MY_CONSTANT');

至于您的代码生成解析器错误的原因,我并非100%肯定。但是,我可以告诉你,PHP语法非常复杂,而且有点混乱 但是,我不会惊讶地发现,$this->foo::BAR是一个表达式,它解析了解析器错误。