[英]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.