PHP5 introduit une API(Application Programming Interface) orientée objet de réflexion nommée Reflection présente dans le module PHP standards et ne nécessite donc aucune installation.
Celle-ci se compose d’une interface et d’un ensemble de classes permettant l’introspection (ou reverse-engineering) d’un grand nombre d’objets PHP jusqu’au Core même de celui-ci, le Zend Engine
Cette API est utilisée par certains frameworks PHP, par certaines extensions PHP ou par certains outils (PHPDoc par exemple). Elle permet de récupérer toutes les informations sur un objet, une classe, une méthode, une fonction.
Chaque classe Reflection est exportabe grâce à la méthode statique export imposée par l’implémentation de l’interface Reflector
D’autres méthodes comme createInstance, createInstanceArgs, createInstanceWithoutConstructor ou invoke permettant, par exemple, de créer des objets Mock très utiles aux test unitaires
N.B : l’API de réflection ne donne accès aux objets PHP qu’en lecture seule. Il n’est pas possible de modifier le corps d’une méthode ou d’ajouter des attributs à la volée par exemple
Liste et application des classes mises à disposition par l’API de réflexion
Reflection | Permet d’exporter un objet Reflection |
ReflectionObject | Permet l’introspection de la classe dont est issu un objet.
Permet par exemple de lister ses constantes, de lister ses méthodes, d’indiquer si la classe est abstraite ou non, si elle est clonable ou non |
ReflectionClass | Permet l’introspection d’une classe, d’une interface ou d’in trait.
Permet par exemple de lister ses constantes, ses attributs, d’indiquer si la classe est finale ou non, si elle est instanciable ou non |
ReflectionMethod | Permet l’introspection d’une méthode
Permet par exemple de lister ses paramètres, d’indiquer si la méthode est finale ou non, si elle est publique ou non |
ReflectionProperty | Permet l’introspection des attributs d’une classe.
Permet par exemple de récupérer le nom de l’attribut, sa valeur, d’indiquer si l’attribut est protégé ou non |
ReflectionFunction | Permet l’introspection d’une fonction
Permet par exemple de lister ses paramètres, de récupérer son nom, d’indiquer si la fonction est deprecated ou non |
ReflectionFunctionAbsttract | Classe abstraite agissant comme classe mère des classes ReflectionFunction et ReflectionMethod |
ReflectionParameter | Permet l’introspection des paramètres d’une fonction ou d’une méthode
Permet par exemple de récupérer le nom d’un paramètre, sa position, d’indiquer s’il est optionnel ou non |
ReflectionException | Classe de typage d’exception spécifique à l’API de Reflection |
ReflectionExtension | Permet l’introspection des extensions PHP comme zlib par exemple
Permet de lister les constantes de l’extension, ses classes, ses entrées du fichier INI |
ReflectionZendExtension | Apparue avec PHP 5.4, permet l’introspection d’une Zend extension comme wdebug par exemple
Permet de récupérer son auteur, son copyright, sa version |
Exemple d’utilisation
<?php Reflection::export(new ReflectionExtension('Ctype'));
Merci de voir l’article Exemple d’utilisation