我有一个简单的示例代码,其中我想将对象操作符与范围解析一起使用以获取类常量(PHP 5.5)。PHP - 在另一个对象中访问这个对象的const
<?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名称一起使用,是否可以访问对象const? 1和2显然有效,3中的简单分配也起作用,但会增加一行。
如果这是不可能的,是否有任何理由否定它或简单的PHP开发人员决定如此或简单忘了使其工作?对我来说,这是相当奇怪的是,4不工作,但3工作没有任何问题
你应该首先意识到你的错误:常量定义为_class_实体,而不是_instance_实体。即使PHP允许实例取消引用,如果您想引用实例“常量”,那么在逻辑中也是一个错误。所以如果PHP在这里有错误(显然,它有) - 那么它就是这样的事情,它允许类通过实例进行常量去引用,而不是在事物中,通过另一个类属性拥有者不可能引用这样的去引用 –
也许,但在这个例子中,我并没有考虑逻辑,而是关于为什么第三种情况起作用,而第四种情况不起作用。无论是应该工作,或在我看来他们都没有 –