Introduction à l'API PHP Reflection

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:

  1. Qu'est-ce que l' API Reflection ?
  2. Installation et configuration
  3. Utiliser
  4. Conclusion
  5. 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 */ class Profile { /** * @return string */ 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:

 //  $reflectionClass = new ReflectionClass('Profile'); //    var_dump($reflectionClass->getName()); => output: string(7) "Profile" //    var_dump($reflectionClass->getDocComment()); => output: string(24) "/** * Class Profile */" 

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

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

 //   class Child extends Profile { } $class = new ReflectionClass('Child'); //     print_r($class->getParentClass()); // ['Profile'] 

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)); // bool(true) //    var_dump(is_a($obj, 'Profile')); // bool(true) //    var_dump($obj instanceof Profile); // bool(true) 

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:

 //    getName() private function getName(): string { return 'Foo'; } $method = new ReflectionMethod('Profile', 'getUserName'); //          if ($method->isPrivate()) { $method->setAccessible(true); } echo $method->invoke(new Profile()); // Foo 

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.

Source: https://habr.com/ru/post/fr433266/


All Articles