PHPで、他のメリットをforward_static_call_array()の代わりにcall_user_func_array()が動的に呼び出す静的方法は?

StackOverflow https://stackoverflow.com/questions/2343974

  •  23-09-2019
  •  | 
  •  

質問

具体的には、より効率的ではないのですか?

役に立ちましたか?

解決

あleat二つの違い forward_static_call_arraycall_user_func_array :

  • 最初に一つだけ存在するからPHP5.3
  • 最初に呼び出す必要から内部クラス

その後、仮に多少違いがありますのでそれに関連し遅めの静的結合が導入されたリリースでは以下のセキュリティ5.3.


で、良かったですが、実は、よく見てください指定された例のようで、このコンテキストのクラス内で使っている forward_static_call_array は"保管"、という方法です。

この部分のコードを、それから、指定されたとえば:

class A {
    const NAME = 'A';
    public static function test() {
        $args = func_get_args();
        echo static::NAME, " ".join(',', $args)." \n";      // Will echo B
    }
}

class B extends A {
    const NAME = 'B';
    public static function test() {
        echo self::NAME, "\n";          // B
        forward_static_call_array(array('A', 'test'), array('more', 'args'));
    }
}

B::test('foo');

しょこの出力:

B
B more,args

すなわちメソッドからのクラスA、知識として知っているとか、、、 static:: キーワードにいること"から少なくしたいときに使います


ろうとした場合に同じものと call_user_func :

class B extends A {
    const NAME = 'B';
    public static function test() {
        echo self::NAME, "\n";          // B
        call_user_func_array(array('A', 'test'), array('more', 'args'));
    }
}

(他のコードを変更しません)

しょこの出力:

B
A more,args

注意 A 第二!と forward_static_call_array, すべてを取得し A, ものの、 B.

この違い: forward_static_call_array 前の静的コンテキストの方法をされているが、 call_user_func_array は来ない。


つ効率の質問:わたしにはわかりません--いベンチマーク;そうでない点:という二つの機能なので同じものだと言ってもいいです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top