Reflexion est une nouveauté de PHP 5.
C'est un outil de développement plus que de production.
Ca permet d'aller plus loin que get_loaded_extensions(), get_extension_funcs(), get_defined_functions(), get_defined_vars(),...
On donne au constructeur un nom de classe, d'interface, de fonction et de méthode ou bien encore d'extension et il fourni une série de méthodes pour récupérer des informations telles que
le nom, le fichier où elle est déclarée, le numéro de ligne de début et de fin dans le fichier, les commentaires phpDoc, les éventuelles variables statiques, l'éventuelle ''Closure'', les références, les paramètres demandés, ...
La doc présente comme ceci :
PHP 5 introduit API de réflexion complète qui permet de faire du reverse-engineering
sur les classes, les interfaces, les fonctions et les méthodes tout comme les extensions.
L'API de réflexion permet également d'obtenir les commentaires
de la documentation pour les fonctions, les classes et les méthodes.
On dispose d'une série de classes qu'on utilise de la sorte
[php]
<?php
$reflexionDeMaFonction = new ReflectionFunction('MaFonction');
?>
Et là on peut utiliser l'objet $reflexionDeMaFonction, on va faire appel à une série de méthodes pour obtenir les informations sur la fonction.
[php]
<?php
var_export ( $reflexionDeMaFonction->isInternal () ? 'internal' : 'user-defined');
var_export ( $reflexionDeMaFonction->getName ());
var_export ( $reflexionDeMaFonction->getFileName ());
var_export ( $reflexionDeMaFonction->getStartLine ());
var_export ( $reflexionDeMaFonction->getEndline ());
?>
Notez qu'on peut aller jusqu'à récupérer les commentaires phpDoc !
[php]
<?php var_export ( $reflexionDeMaFonction->getDocComment ());
?>
Ca c'était pour les fonctions. on a aussi
- La classe ReflectionParameter pour les paramètres des fonctions ou des méthodes.
- La classe ReflectionClass pour les classes et les interfaces.
- La classe ReflectionException pour les Exception.
- La classe ReflectionObject pour les objets.
- La classe ReflectionMethod pour les méthodes des classes.
- La classe ReflectionProperty pour les propriétés des classes.
- La classe ReflectionExtension les extensions.
Il y a même la possibilité d'étendre ces classes pour faire votre propre reflexion.
Regardez l'article complet pour avoir un exemple sur une fonction maison, sur array_reverse et sur Zend_log. L'output est dans le premier commentaire.
à lire aussi
Lire la suite...