4

クラスのスコープ内で定義された呼び出し可能なメソッドの配列を持つことはできないようです。なぜだめですか?

これが有効な PHP である理由 ( http://3v4l.org/1JeQrを参照)

$methods = array(
    1 => function($subject, $value){
        return ($subject == $value);
    }
);

var_dump($methods[1]('a', 'a'));

しかし、これではありません ( http://3v4l.org/FL449を参照)

class Foo {
    public static $methods = array(
        1 => function($subject, $value){
            return ($subject == $value);
        }
    );
}

var_dump(Foo::$methods[1]('a', 'a'));
4

2 に答える 2

5

私は携帯電話で作業しているので、非常に迅速な回答です(最終的には後で編集できます.

クロージャを定義すると、実際には type のオブジェクトのインスタンス化が実行されますClosure。PHP は、ネイティブの内部型のみをクラスのデフォルト値としてサポートします。つまり、クロージャーの構築は明らかに機能しません。

于 2013-10-10T19:24:55.307 に答える