在PHP中有多个paamayim nekudotayims,为什么不呢?

Dan*_*ugg 7 php static-methods scope-resolution dynamic-class

PHP 5.3.6中,我注意到以下内容不起作用:

class Foo{
    public static $class = 'Bar';
}

class Bar{
    public static function sayHello(){
        echo 'Hello World';
    }
}

Foo::$class::sayHello();
Run Code Online (Sandbox Code Playgroud)

发行unexpected T_PAAMAYIM_NEKUDOTAYIM.但是,使用临时变量会产生预期的结果:

$class = Foo::$class;
$class::sayHello(); // Hello World
Run Code Online (Sandbox Code Playgroud)

有没有人知道这是设计的,还是范围分辨算子如何被标记化的意外结果?任何更清洁的解决方法比后者,临时变量示例?

Mik*_*ike 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()'
Run Code Online (Sandbox Code Playgroud)

另外,您为什么首先要做这样的事情?我确信一定有更好的方法来完成您想要做的事情 - 如果您使用变量或类名,通常会有更好的方法。