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

残念ながら、1行でそれを行う方法はありません。私はあなたが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 に答える