PHP 5.5:访问存储在对象中的动态类的静态类成员

时间:2015-09-30 07:02:19

标签: php variables static

我们假设以下内容:

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的好方法。

3 个答案:

答案 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);