9

私は次のように単純化された方法を持っています:

class Foo {

   public function bar($id) {
      // do stuff using $this, error occurs here
   }

}

このように呼び出すとうまくいきます:

$foo = new Foo();
$foo->bar(1);

ただし、次のように を使用して呼び出すとcall_user_func_array()、次のようになります。

call_user_func_array(array("Foo", "bar"), array('id' => 1));

どちらが等しいはずですが、次のエラーが発生します。

致命的なエラー: オブジェクト コンテキストではないときに $this を使用する

($thisは未定義)

どうしてこれなの?足りないものはありますか?$this呼び出されたメソッドで引き続き使用できるようにするには、どうすればよいですか?

4

2 に答える 2

14

array("Foo", "bar")is equal to 、つまり静的メソッド -はどこにも使用されておらず、PHPは使用するインスタンスを認識できないFoo::bar()ため、これは理にかなっています。$foo

必要なのは、インスタンスメソッドarray($foo, "bar")を呼び出すことです。

さまざまな callable のリストについては、http://php.net/manual/en/language.types.callable.phpを参照してください。


また、連想配列ではなく、インデックス付き配列として引数を渡す必要がありますarray(1)array('id' => 1)

于 2012-10-14T19:58:00.047 に答える