5.10.18 Réflexion 
5.10 Les classes et les objets (PHP 5) 
5 Référence du langage 
 Manuel PHP 
 . Introduction . ReflectionFunction . ReflectionParameter . ReflectionClass ->ReflectionMethod . ReflectionProperty . ReflectionExtension . Extension des classes de réflexion
 
  | 
 
  5.10.18.5 ReflectionMethod 
 
    La classe  
ReflectionMethod
  vous permet de faire du
     
reverse-engineering
  sur les méthodes des classes.
    
 
<?php class ReflectionMethod extends ReflectionFunction {     public __construct(mixed class, string name)     public string __toString()     public static string export()     public mixed invoke(stdclass object, mixed* args)     public moxed invokeArgs(stdclass object, array args)     public bool isFinal()     public bool isAbstract()     public bool isPublic()     public bool isPrivate()     public bool isProtected()     public bool isStatic()     public bool isConstructor()     public bool isDestructor()     public int getModifiers()     public ReflectionClass getDeclaringClass()
      // Inherited from ReflectionFunction     final private __clone()     public string getName()     public bool isInternal()     public bool isUserDefined()     public string getFileName()     public int getStartLine()     public int getEndLine()     public string getDocComment()     public array getStaticVariables()     public bool returnsReference()     public ReflectionParameter[] getParameters()     public int getNumberOfParameters()     public int getNumberOfRequiredParameters() } ?>
 
 |   
 
    Pour connaître le fonctionnement d'une méthode, vous devez d'abord créer
    une instance de la classe  
ReflectionMethod
 . Vous
    pourrez ainsi appeler n'importe quelles méthode de cette instance.
    
 
| Utilisation de la classe ReflectionMethod |  
<?php class Compteur {     private static $c = 0;
      /**      * Incrémentation d'un compteur      *      * @final      * @static      * @access  public      * @return  int      */     final public static function increment()     {         return self::$c;     } }
  // Création d'une instance de la classe Reflection_Method $method = new ReflectionMethod('Compteur', 'increment');
  // Affichage d'informations basiques printf(     "===> La méthode %s%s%s%s%s%s%s '%s' (qui est %s)\n".     "     déclaré dans %s\n".     "     lignes %d à %d\n".     "     a les modificateurs %d[%s]\n",     $method->isInternal() ? 'internal' : 'user-defined',     $method->isAbstract() ? ' abstract' : '',     $method->isFinal() ? ' final' : '',     $method->isPublic() ? ' public' : '',     $method->isPrivate() ? ' private' : '',     $method->isProtected() ? ' protected' : '',     $method->isStatic() ? ' static' : '',     $method->getName(),     $method->isConstructor() ? 'the constructor' : 'a regular method',     $method->getFileName(),     $method->getStartLine(),     $method->getEndline(),     $method->getModifiers(),     implode(' ', Reflection::getModifierNames($method->getModifiers()))   );
  // Affichage du commentaire de la documentation printf("---> Documentation:\n %s\n", var_export($method->getDocComment(), 1));
  // Affichage des variables statiques si elles existent if ($statics= $method->getStaticVariables()) {     printf("---> Variales statiques : %s\n", var_export($statics, 1)); }
  // Invocation de la méthode printf("---> Résultat de l'invocation dans : "); var_dump($method->invoke(NULL)); ?>
 
 |   
 
| Note |  | 
 
     Invoquer des méthodes privées, protégées ou abstraites provoquera
     une exception jetée par la méthode  
invoke
 .
     
 |   
 
| Note |  | 
 
     Pour les méthodes statiques comme vu précédemment, vous devez passer
      
NULL
  comme premier argument à la fonction  
invoke
 .
     Pour les méthodes non-statiques, passez une instance de la classe.
     
 |   
 |