2010-08-09 4 views
9

Si j'ai une classe PHP comme celui-ci:Pointeur de fonction vers un membre de classe statique?

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

Je sais que je peux y accéder avec:

echo A::Method(); 

Mais comment pourrais-je aller sur la création d'une référence de fonction à cette méthode? J'ai essayé quelque chose comme ceci:

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

Mais cela me donne une erreur d'exécution. Alors, est-ce possible en PHP? Si c'est le cas, comment? Merci! :)

Répondre

8

Deux options:

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

Il est prévu (mais il est sujet à changement) pour être en mesure de le faire avec réflexion la prochaine version de PHP:

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

Merci, cela a répondu à ma question. :) – qJake

+0

La méthode 'getClosure' est devenue disponible avec PHP 5.4. Méfiez-vous cependant car environ 50% des serveurs utilisent encore 5.3 – Twifty

2

Les méthodes de classe ou les méthodes d'objet sont appelées différemment des fonctions normales. Utilisez call_user_func ou call_user_func_array:

call_user_func(array('A', 'Method')); 
call_user_func('A::Method'); // As of 5.2.3 
Questions connexes