Qu’est-ce que l’API PHP Reflection
L’API PHP Reflection est une fonctionnalité intégrée à PHP permettant d’obtenir et d’inspecter à l’exécution les méta-informations des classes, méthodes, propriétés, fonctions ou paramètres. Vous pouvez ainsi vérifier les arguments du constructeur d’une classe, ou les attributs posés sur une méthode, sans modifier directement le code source. Laravel utilise abondamment l’API Reflection à l’intérieur deIlluminate/Container/Container.php pour la résolution automatique du conteneur DI, la lecture des attributs PHP ou l’injection dans les méthodes.
Classes principales
ReflectionClass — obtenir des informations sur une classe
ReflectionParameter — inspecter les arguments d’un constructeur
Conteneur Laravel et API Reflection
Le conteneur IoC de Laravel s’appuie sur l’API Reflection pour l’injection par constructeur (résolution automatique des dépendances). Comprenons le mécanisme derrièreapp()->make(SomeClass::class) et l’injection de dépendances.
La méthode build() du conteneur (version simplifiée)
Le vrai build() de Container.php ressemble à peu près à ceci.
Util::getParameterClassName() est un utilitaire qui extrait le nom du type sous forme de chaîne à partir du résultat de $parameter->getType(). Il enveloppe le ReflectionNamedType renvoyé par ReflectionParameter::getType() de manière plus commode.Lire les attributs PHP
Depuis PHP 8.0, l’API Reflection permet de récupérer les attributs posés sur des classes, méthodes ou propriétés. Laravel s’en sert pour traiter les attributs de queue ou d’Eloquent.Schéma de base pour lire un attribut
Comment Laravel lit l’attribut Queue (version simplifiée)
Lire les attributs d’une méthode
Utilisations en développement de packages
Vérifier les interfaces implémentées par une classe
Vous pouvez vérifier dynamiquement si une classe implémente une interface donnée depuis votre package.Récupération de métadonnées — enregistrer automatiquement des routes via attributs
Un schéma combinant attributs et Reflection pour collecter automatiquement les routes.Appel dynamique de méthode — injection de méthode
La méthodecall() de Laravel utilise Reflection pour résoudre automatiquement les arguments. Voici comment implémenter le même mécanisme dans un package.
Récupérer les valeurs par défaut des propriétés
Schéma pour récupérer les valeurs par défaut d’une classe de configuration via Reflection.Attention aux performances
L’API Reflection parse les informations de classe à chaque appel : cela a un coût. En production, la bonne pratique est de mettre les résultats en cache.Étapes suivantes
Attributs PHP
Découvrez en détail les attributs PHP lus via
ReflectionClass::getAttributes().Développement de packages
Découvrez comment développer un package Laravel en tirant parti de l’API Reflection.