2012-03-10 15 views
5

Poniższy kod działa poprawnie.Jak korzystać z metody call_user_func dla metody klasy statycznej?

LibraryTests::TestGetServer(); 

Pobierz wachlarz funkcji w LibraryTests i uruchomić je:

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

ten zgłasza błąd: Warning: call_user_func(LibraryTests::TestGetServer()) [function.call-user-func]: First argument is expected to be a valid callback

Oto klasa, który jest nazywany:

class LibraryTests extends TestUnit { 

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

Jak naprawić?

Praca w PHP 5.2.8.

+0

Nie dodawaj '()' jeśli funkcja nie ma parametrów – m13r

Odpowiedz

11

Albo (od PHP 5.2.3):

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

Albo (wcześniej):

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

Zobacz call_user_func­Docs i Callback Pseudo-Type­Docs.

+0

Cóż, musisz mieć prawidłowe wywołanie zwrotne, aby zadziałało. Jeśli wstawisz nieprawidłowe wartości do '$ method', to nie zadziała. Jeśli umieścisz tam prawidłowe wartości, to działa. Uważaj, aby było to tylko dla metod klasy statycznej. – hakre

+0

Oba rzuty '... [function.call-user-func]: Pierwszy argument powinien być prawidłowym oddzwanianiem w ...' –

+0

Po pierwsze zdefiniuj mehtod jako statyczny w twojej klasie: 'static function TestGetServer '- lub działa na instancji klasy z notacją tablicową. Połączyłem dwie strony z podręcznika, które zawierają wiele informacji i przykładów, i powinny Cię poprowadzić tak, abyś mógł rozwiązać problem w jakikolwiek sposób, który odpowiada Twoim potrzebom. – hakre

Powiązane problemy