【发布时间】:2011-09-30 23:01:19
【问题描述】:
在 PHP 5.3.6 中,我注意到以下内容不起作用:
class Foo{
public static $class = 'Bar';
}
class Bar{
public static function sayHello(){
echo 'Hello World';
}
}
Foo::$class::sayHello();
发出unexpected T_PAAMAYIM_NEKUDOTAYIM。但是,使用临时变量会产生预期的结果:
$class = Foo::$class;
$class::sayHello(); // Hello World
有谁知道这是设计使然,还是范围解析运算符被标记化的意外结果?比后者更简洁的解决方法,临时变量示例?
【问题讨论】:
-
可能想在此尝试一个卷曲语法向量。
{${Foo::$class}}::sayHello();这样的事情可能会奏效。我面前没有 PHP 解析器。 -
谢谢@Mark Tomlin - 不幸的是,我可能已经尝试了所有可能的组合。它总是最终寻找
$Foo或$Bar -
如果我记得这个问题,我会在我下班回家时试一试。代码在 5.3.6 之前有效吗?
-
@Mark Tomlin - 不,据我所知,它没有起作用。随着在 PHP 5.x 中为静态调用引入动态类名,这将是有道理的,这也将得到支持,当然除非有疏忽的可能性。
-
这就像一个非常奇怪的late static bindings 版本,PHP 开发人员没有考虑过。
标签: php static-methods dynamic-class scope-resolution