2012-03-10 19 views
5

El siguiente código funciona bien.Cómo usar call_user_func para el método de clase estática?

LibraryTests::TestGetServer(); 

Obtener la matriz de funciones en LibraryTests y ejecutarlos:

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

Esto arroja un error: Warning: call_user_func(LibraryTests::TestGetServer()) [function.call-user-func]: First argument is expected to be a valid callback

Aquí es la clase que se está llamando:

class LibraryTests extends TestUnit { 

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

¿Cómo solucionarlo?

Trabajando en PHP 5.2.8.

+0

No agregue '()' si la función no tiene parámetros – m13r

Respuesta

11

O bien (a partir de PHP 5.2.3):

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

O (anterior):

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

Ver call_user_func­Docs y la Callback Pseudo-Type­Docs.

+0

bien es necesario tener una devolución de llamada válida para que eso funcione. Si coloca valores inválidos en '$ method', no funciona. Si pone valores válidos allí, funciona. Tenga cuidado de que esto sea solo para métodos de clases estáticas. – hakre

+0

Ambos lanzan '... [function.call-user-func]: Se espera que el primer argumento sea una devolución de llamada válida en ...' –

+0

Bueno, primero defina el mehtod como estático en su clase: 'función estática TestGetServer '- o trabaja en una instancia de clase con la notación de matriz. Relacioné dos páginas del manual que contienen mucha información y ejemplos, y debo guiarlo por el camino para que pueda resolver el problema de la manera que se ajuste a sus necesidades. – hakre

Cuestiones relacionadas