我有一個簡單的示例代碼,其中我想將對象操作符與範圍解析一起使用以獲取類常量(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在這裏有錯誤(顯然,它有) - 那麼它就是這樣的事情,它允許類通過實例進行常量去引用,而不是在事物中,通過另一個類屬性擁有者不可能引用這樣的去引用 –
也許,但在這個例子中,我並沒有考慮邏輯,而是關於爲什麼第三種情況起作用,而第四種情況不起作用。無論是應該工作,或在我看來他們都沒有 –