PHP -Réflexion-

Ajouter un commentaire

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

Référence :