2010-08-09 22 views
9

Si tengo una clase PHP como este:Puntero de función al miembro de la clase estática?

class A 
{ 
    public static function Method() 
    { 
     return "x"; 
    } 
} 

Sé que puedo acceder a este con:

echo A::Method(); 

Pero, ¿cómo hago para crear una referencia de función de este método? Intenté algo como esto:

$func = "A::Method"; 
echo $func(); 

Pero me da un error de tiempo de ejecución. Entonces, ¿es esto posible en PHP? ¿Si es así, cómo? ¡Gracias! :)

Respuesta

8

Dos opciones:

  • call_user_func("A::Method");
  • $func = function() { return A::Method(); }; echo $func()

Está previsto (pero es sujeto a cambios) para ser capaz de hacer esto con la reflexión en la próxima versión de PHP:

$srm = new ReflectionMethod('A::Method'); 
$func = $srm->getClosure(); 
$func(); 
+0

Gracias, esto respondió mi pregunta. :) – qJake

+0

El método 'getClosure' quedó disponible con PHP 5.4. Sin embargo, ten cuidado ya que aproximadamente el 50% de los servidores aún usan 5.3 – Twifty

2

Los métodos de clase o los métodos de objeto se llaman de forma diferente que las funciones normales. Utilice call_user_func o call_user_func_array:

call_user_func(array('A', 'Method')); 
call_user_func('A::Method'); // As of 5.2.3 
Cuestiones relacionadas