3

クラスで静的メソッドとプロパティを使用するのは初めてです。私がやろうとしているのは、変数関数を実行することですが、使用できません:

self::$static_var()

PHP は通知をスローします。

Undefined variable: static_var

最初に次のようにローカル変数に割り当てる必要があります。

$local_var = self::$static_var;

それから私はすることができます

$local_var();

コード例を次に示します。テスト 1が機能しない理由がわかりません。目的の機能を得るには、テスト 2を実行する必要があります。 質問:テスト 1が機能しないのはなぜですか?

テスト 1 - 機能しない

X::do_stuff('whatever');

class X {
    public static $static_var = 'print_r';

    public static function do_stuff($passed_var) {
        self::$static_var($passed_var);
    }
}

テスト 2 - 動作します

X::do_stuff('whatever');

class X {
    public static $static_var = 'print_r';

    public static function do_stuff($passed_var) {
        $local_var = self::$static_var;
        $local_var($passed_var);
    }
}
4

1 に答える 1

3

使用call-user-func:

call_user_func(self::$static_var, $passed_var);

編集した質問について:

PHPドキュメントで説明を見つけようとしました。$static_var関数呼び出しが処理された時点でまだ評価されていないことが原因であると考えられます。しかし、あなたの質問に対する最良の答えは、おそらく次のとおりです。良い例は$classname::metdhod();、PHP 5.3 より前では有効ではありませんでした。今はそうです。本当に理由はありません。PHPの人に聞いてみてください。

于 2013-02-01T20:53:09.273 に答える