我们假设以下内容:
class a {
public static $foo = 'bar';
}
class b {
public $classname = 'a';
}
$b = new b();
以某种方式(花括号等)可以直接访问$ foo而不会产生“unexpected ::(T_PAAMAYIM_NEKUDOTAYIM)”:
$b->classname::$foo //should result in "bar" not in an "unexpected :: (T_PAAMAYIM_NEKUDOTAYIM)"
我知道并使用以下解决方法:
$c = $b->classname;
$c::$foo;
但我想知道是否存在另一种直接访问$ foo的好方法。
答案 0 :(得分:1)
你可以像使用变量变量一样使用
class a {
public static $foo = 'bar';
public function getStatic(){
return self::$foo;
}
}
class b {
public $classname = 'a';
}
$b = new b();
$a = new a();
echo ${$b->classname}->getStatic();//bar
答案 1 :(得分:1)
对于记录,以下适用于PHP 7:
echo $b->classname::$foo;
旧版本需要一个与您正在使用的版本相似的解决方法(已经是#34;最好的"一个),因为解析器的工作方式不同。
答案 2 :(得分:0)
您需要构建此表达式:
$ string = a :: $ foo;
你可以这样使用eval:
eval('$string=' . $b->classname . '::$foo;');
print($string);