L'API de réflexion PHP est une bibliothèque de classe intégrée qui permet aux développeurs d'obtenir des informations détaillées sur les classes, les méthodes, les attributs et autres structures lors de l'exécution. Grâce à la réflexion, nous pouvons analyser et exploiter des programmes PHP sans visualiser le code source. Ceci est très pratique dans les cadres de développement, les systèmes de plug-in, les conteneurs d'injection de dépendance et d'autres scénarios.
L'API de réflexion peut non seulement lire les structures de classe, mais également prendre en charge les appels dynamiques vers des méthodes, modifier les autorisations d'accès et même instancier des objets. Cela améliore considérablement la flexibilité et l'évolutivité de PHP.
Utilisez la classe ReflectionClass pour créer un objet réfléchissant d'une classe:
$reflector = new ReflectionClass('Foo');
où «foo» est le nom de la classe. Cet objet peut être utilisé pour accéder aux informations de structure de la classe.
Toutes les méthodes définies dans la classe peuvent être obtenues via la méthode GetMethods :
$methods = $reflector->getMethods();
En traversant le tableau des méthodes $ , vous pouvez afficher le nom, le nombre de paramètres, les autorisations d'accès, etc. de chaque méthode.
De même, la méthode GetProperties est utilisée pour obtenir toutes les propriétés de la classe:
$properties = $reflector->getProperties();
Cette méthode renvoie un tableau d'objets ReflectionProperty qui peuvent être utilisés pour lire les détails de la propriété.
Vous pouvez utiliser la classe ReflectionMethod pour accéder à des méthodes spécifiques:
$reflector = new ReflectionMethod('Foo', 'bar');
où «foo» est le nom de classe et «bar» est le nom de la méthode. L'objet réfléchi créé peut être utilisé pour analyser la méthode.
Cette méthode peut être appelée en utilisant la méthode invoquée :
$result = $reflector->invoke($object, $args);
$ objet est une instance de classe, et $ args est un tableau de paramètres. Cette méthode prend en charge les appels dynamiques lors de l'exécution.
Pour les méthodes privées ou protégées, leur accessibilité peut être modifiée via la méthode SetAcessable :
$reflector->setAccessible(true);
Cela vous permet de contourner directement les méthodes de contrôle d'accès et d'appel, qui sont souvent utilisées pour tester ou sous-jacent les opérations du cadre.
Utilisez la classe ReflectionProperty pour obtenir des informations sur des propriétés spécifiques:
$reflector = new ReflectionProperty('Foo', 'bar');
Cela s'applique à l'accès à des propriétés spécifiques d'une certaine classe.
Les valeurs d'attribut peuvent être lues et modifiées de la manière suivante:
$value = $reflector->getValue($object);
$reflector->setValue($object, $value);
Peu importe que l'attribut soit public, privé ou protégé, il peut être exploité avec réflexion, il suffit d'appeler SetAccessible (true) .
L'API de réflexion PHP fournit aux développeurs des outils puissants pour l'analyse dynamique et la manipulation des structures de code. Il joue un rôle clé, qu'il débogue, teste ou construit un cadre. La maîtrise de l'utilisation de la réflexion peut considérablement améliorer la flexibilité et l'évolutivité des projets PHP.