2012-03-10 7 views
5

次のコードは正常に動作します。静的クラスメソッドにcall_user_funcを使用するにはどうすればよいですか?

LibraryTests::TestGetServer(); 

LibraryTestsにおける関数の配列を取得し、それらを実行します。

$methods = get_class_methods('LibraryTests'); 
foreach ($methods as $method) { 
    call_user_func('LibraryTests::' . $method . '()'); 
} 

これは、エラーがスローされます。ここではWarning: call_user_func(LibraryTests::TestGetServer()) [function.call-user-func]: First argument is expected to be a valid callback

が呼び出されているクラスです。

class LibraryTests extends TestUnit { 

    function TestGetServer() { 
     TestUnit::AssertEqual(GetServer(), "localhost/"); 
    } 
    . 
    . 
    . 

修正方法?

PHP 5.2.8で作業しています。 (PHP 5.2.3のように)

+0

関数にパラメータがない場合は、 '()'を追加しないでください。 – m13r

答えて

11

次のいずれかの(以前の)

$methods = get_class_methods('LibraryTests'); 
foreach ($methods as $method) { 
    call_user_func('LibraryTests::' . $method); 
} 

または:

$methods = get_class_methods('LibraryTests'); 
foreach ($methods as $method) { 
    call_user_func(array('LibraryTests', $method)); 
} 

call_user_func­DocsCallback Pseudo-Type­Docsを参照してください。

+0

有効にするには有効なコールバックが必要です。無効な値を '$ method'に入れると動作しません。あなたがそこに有効な値を置くなら、それは機能します。静的なクラスメソッドのみに注意してください。 – hakre

+0

両方とも '... [function.call-user-func]:最初の引数は有効なコールバックであると期待されます。 ' –

+0

まず、クラス内で静的なmehtodを定義します:' static function TestGetServer ' - または配列表記法を使ってクラスインスタンスを操作します。私は多くの情報と事例を含むマニュアルから2ページをリンクしており、あなたのニーズに合った方法で問題を解決できるようにあなたを導くはずです。 – hakre

関連する問題