“Mega” 动态访问 PHP 5.3 中的静态方法/属性


"Mega" Dynamic acces to static method/property in PHP 5.3?

有这2个类:

class run {
   public static $where = "there";
}
class there {
   public static $place_name = "A beautiful place..";
}

为了获得place_name我可以这样做:

$place = "there";
echo $place::$place_name;

但我可能想在某个时候做这样的事情..:

echo {$run::$where}::$place_name;

显然,最后一个片段不起作用。有没有办法让它起作用?

如果您不想使用变量(如您在评论中所说),请三思而后行。变量在PHP中很酷,非常快,只是需要的胶水来解决其有限的解析器(据说这使得PHP非常快)。那么为什么不在这里使用变量呢?它易于键入且快速完成。

如果你不想要这个变量,并且我们已经发现 PHP 的语法是有限的,你至少可以用 PHP 5.4+ 编写一行代码来实现你想要的:

echo (new ReflectionClass((new ReflectionClass($run))->getStaticPropertyValue('where')))->getStaticPropertyValue('place_name');

然后最终应该可以看到使用变量更舒适:

echo (unset) $place = $run::$where, $place::$place_name;

演示:http://eval.in/13942