ReflectionClass
<<<
ReflectionMethod ReflectionProperty
>>>

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-engineer 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 Counter
{
    
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('Counter', '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.

<< ReflectionMethod >>
ReflectionClass Réflexion ReflectionProperty