繁体   English   中英

访问类常量槽属性不起作用

[英]Accessing class constant trough property doesn't work

例:

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;
}

这仍然是愚蠢的,但可以防止不得不使用反射。

如果类名称未知,则可以使用ReflectionClass获取常量。 请注意,您必须使用PHP 5或更高版本。

例:

$c = new ReflectionClass($this->lol);
echo $c->getConstant('FOO'); // 1

从PHP 5.3.0开始,您可以通过包含类名的变量访问常量:

$name = get_class($this->lol);
echo $name::FOO; // 1

有关详细信息,请参阅范围解析运算符 - PHP

$lol = &$this->lol;
echo $lol::FOO;
..
unset($lol);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM