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.
|
|