Bonjour, Habr! Je vous présente la traduction de l'article "
Introduction à PHP Reflection API " de
Mustafa Magdi .
Comment analyser la structure des données en PHP

Entrée
Quand j'ai commencé à programmer en PHP, je ne connaissais pas les capacités de l'
API Reflection . La raison principale est que je n'avais pas besoin de concevoir mes classes, modules ou même packages simples. J'ai ensuite découvert que cela joue un rôle majeur dans de nombreux domaines. Dans l'article, nous considérerons l'
API Reflection sur les points suivants:
- Qu'est-ce que l' API Reflection ?
- Installation et configuration
- Utiliser
- Conclusion
- Recommandations
1. Qu'est-ce que l'API Reflection
En informatique, la réflexion ou la réflexion (l'holonyme de l'introspection, réflexion en anglais) désigne un processus au cours duquel un programme peut suivre et modifier sa propre structure et son comportement lors de l'exécution. - Wikipédia .
Que signifie la possibilité d'arrêter et de regarder à l'intérieur de votre code (
rétro-ingénierie )? Regardons l'extrait de code suivant:
class Profile { public function getUserName(): string { return 'Foo'; } }
La classe
Profile est une boîte noire. En utilisant l'
API Reflection, vous pouvez lire ce qu'il contient:
Ainsi, la
ReflectionClass agit en tant qu'analyste pour notre classe
Profile , et c'est l'idée principale de l'
API Reflection .
PHP vous donne la clé de n'importe quelle boîte verrouillée, nous avons donc les clés
pour les éléments suivants:
ReflectionClass : rapporte les informations de classe.
ReflectionFunction : rapporte des informations sur la fonction.
ReflectionParameter : récupère des informations sur les paramètres d'une fonction ou d'une méthode.
ReflectionClassConstant : rapporte les informations de constante de classe.
Vous pouvez étudier la liste complète sur
php.net2. Installation et configuration
Pour utiliser les classes de l'
API Reflection , il n'est pas nécessaire d'installer ou de configurer quoi que ce soit, car elles font partie du noyau PHP.
3. Exemples d'utilisation
Voici quelques exemples d'utilisation de l'
API Reflection :
Exemple 1:Obtenez la classe parente pour une classe spécifique:
Exemple 2:Obtenez la documentation de la méthode
getUserName()
:
$method = new ReflectionMethod('Profile', 'getUserName'); var_dump($method->getDocComment()); => output: string(33) "/** * @return string */"
Exemple 3:Il peut être utilisé comme
instanceOf
et
is_a()
pour valider des objets:
$class = new ReflectionClass('Profile'); $obj = new Profile(); var_dump($class->isInstance($obj));
Exemple 4:Dans certaines situations, vous pouvez être bloqué avec des tests unitaires et vous demander: "Comment puis-je tester une fonction privée?!"
Ne vous inquiétez pas, voici l'astuce:
Les exemples précédents sont assez simples, mais il existe d'autres exemples où vous pouvez voir comment l'
API Reflection est utilisée plus largement:
- Générateur de documentation API : le package lavarel-apidoc-generator utilise largement ReflectionClass et ReflrectionMethod pour obtenir puis traiter les informations sur les blocs de documentation pour les classes et les méthodes, et pour styliser ces blocs de code.
- Conteneur d'injection de dépendances : vous pouvez consulter l'ensemble du sujet ici
4. Conclusion
PHP fournit une
API de réflexion complète qui vous aide à atteindre facilement différents domaines des structures OOP.
5. Références
Du traducteur:Vous pouvez également voir un exemple d'utilisation de l'API Reflection dans le package Codeception de la classe Stub .
Cette classe par réflexion aide à plonger les méthodes et les propriétés dans les tests unitaires.
Il faut ajouter que l'API Reflection fonctionne assez lentement, donc ne vous impliquez pas trop. Il est recommandé de l'utiliser dans les tests ou lors du débogage, mais si vous pouvez vous en passer, il est préférable de le faire. Et il est catégoriquement déconseillé de l'utiliser dans le code de travail du projet, car ce n'est pas sûr non plus.