php - PHP 中的多个 paamayim nekudotayims,为什么不呢?

标签 php static-methods dynamic-class scope-resolution

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

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

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

Foo::$class::sayHello();

发出意外的 T_PAAMAYIM_NEKUDOTAYIM。但是,使用临时变量会产生预期的结果:

$class = Foo::$class;
$class::sayHello(); // Hello World

有谁知道这是设计使然,还是范围解析运算符被标记化的意外结果?有没有比后一个临时变量示例更简洁的解决方法?

最佳答案

不幸的是,没有办法在一行中完成。我认为您可以使用 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()'

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

关于php - PHP 中的多个 paamayim nekudotayims,为什么不呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6619465/

相关文章:

python - 动态类定义的 pickle

php - 如何从两个不同的表中按两个不同的类别有条件地排序

oop - 什么时候使用静态类和方法?

java - 从静态方法的鼠标监听器修改全局定义的静态变量

php - 在 PHP 中使用带有作用域解析运算符的变量

java - 在java中创建一个动态类

php - 如何限制对 PHP 文件的访问?

javascript - 使用MySQL数据和PHP获取的Google图表?

javascript - 根据另一个下拉菜单的选择更改第二个下拉菜单的值