2011-01-18 13 views
0

次のクラスの$this->test = 'test';を参照して、古いおなじみの "致命的なエラー:$ thisをオブジェクトコンテキストに使用しないでください"

class Example { 
    public $test; 
    public function index() { 
     $this->test = 'test'; 
    } 
} 

call_user_func_array(array('example', 'index'), $params);でクラスメソッドが呼び出されます。私はcall_user_func_arrayが何らかの理由でインデックスメソッドを静的なものとして呼び出すと決めたと仮定することができます。 example::index()?しかし、私はこれのための修正を見つけていないと奇妙なことに私は最近までそれに問題がなかった。

答えて

5

これは動作します:

$obj = new Example(); 
call_user_func_array(array($obj, 'index'), $params); 

あなたのコードは基本的に行います。

Example::index($params); 

正しく想定され、静的にindexを呼び出します。

+0

私はオートローディングを利用しています。申し訳ありません。 call_user_func_arrayは、クラスを手動でインスタンス化する必要がないという印象を受けました。これは当てはまりませんか? –

+0

@Riddian Nope。そうではありません。静的呼び出しを実際に実行する方法はありません。 BTW:この動作は、コールバックを取るすべてのPHP関数(['usort'](http://de2.php.net/manual/en/function.usort.phpなど)など)に適用されます。 [擬似型と変数...](http://de2.php.net/manual/en/language.pseudo-types.php#language.types.callback)を参照してください。 –

+0

分かりました。最も役立つありがとう! –

関連する問題