7

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

有谁知道这是设计使然,还是范围解析运算符如何标记的意外结果?比后者更干净的解决方法,临时变量示例?

4

1 回答 1

2

不幸的是,没有办法在一行中做到这一点。我以为你可以用 call_user_func() 来做到这一点,但不行:

call_user_func(Foo::$class.'::sayHello()');
// Warning: call_user_func() expects parameter 1 to be a valid callback, class 'Bar' does not have a method 'sayHello()'

另外,你为什么要首先做这样的事情?我确信必须有更好的方法来做你想做的事情——如果你使用可变变量或类名,通常是这样。

于 2011-07-08T04:12:39.250 回答