例子:

class LOL{
  const
    FOO = 1;
}

$x = new LOL;
$arr = array('x' => $x);

echo $x::FOO; // works
echo $arr['x']::FOO; // works too

但是,如果我将类实例设为属性,则无法再访问常量:
class WWW{
  protected $lol;

  public function __construct($lol){
    $this->lol= $lol;
  }

  public function doSMth(){
    echo $this->lol::FOO; // fail. parse error.. wtf
  }
}

$w = new WWW;
$w->doSMth();

:(

我知道我可以做echo LOL::FOO,但是如果类名未知,该怎么办?从那个位置开始,我只能访问该对象/属性,并且我真的不希望WWW类“意识到”其他类及其名称。它应该只与给定的对象一起工作

最佳答案

通过将lol属性分配给局部变量,您可以更轻松地做到这一点,如下所示:

public function doSMth(){
    $lol = $this->lol;
    echo $lol::FOO;
}

这仍然很愚蠢,但是可以避免使用反射。

关于php - 访问类常量槽属性不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11485270/

10-09 17:14