Dans l'article précédent "Framework API PHP manuscrit - Installation et utilisation de Composer (2)", nous avons présenté l'installation et l'utilisation de Composer. Dans cet article, nous présenterons le concept de réflexion.
La réflexion, la compréhension intuitive consiste à trouver le point de départ et la source en fonction du lieu d'arrivée. La réflexion fait référence à l'extension de l'analyse des programmes PHP dans l'état d'exécution de PHP, à l'exportation ou à la proposition d'informations détaillées sur les classes, méthodes, propriétés, paramètres, etc., y compris des commentaires. Cette fonction d'obtention dynamique d'informations et d'appel dynamique de méthodes objet est appelée API de réflexion.
Jetons d'abord un coup d'œil à une démo :
<?php function p($msg, $var) { echo($msg.":".print_r($var, true)).PHP_EOL.PHP_EOL; } class Demo { private $id; protected $name; public $skills = []; public function __construct($id, $name, $skills = []) { $this->id = $id; $this->name = $name; $this->skills = $skills; } public function getName() { return $this->name; } public function getSkill() { p('skill', $this->skills); } } $ref = new ReflectionClass('Demo'); if ($ref->isInstantiable()) { p('检查类是否可实例化isInstantiable', null); } $constructor = $ref->getConstructor(); p('获取构造函数getConstructor', $constructor); $parameters = $constructor->getParameters(); foreach ($parameters as $param) { p('获取参数getParameters', $param); } if ($ref->hasProperty('name')) { $attr = $ref->getProperty('name'); p('获取属性getProperty', $attr); } $attributes = $ref->getProperties(); foreach ($attributes as $row) { p('获取属性列表getProperties', $row->getName()); } if ($ref->hasMethod('getSkill')) { $method = $ref->getMethod('getSkill'); p('获取方法getMethod', $method); } $methods = $ref->getMethods(); foreach ($methods as $row) { p('获取方法列表getMethods', $row->getName()); } $instance = $ref->newInstanceArgs([1, 'sai', ['php', 'js']]); p('newInstanceArgs', $instance);
Sortie :
➜ php git:(main) php reflect.php 检查类是否可实例化isInstantiable: 获取构造函数getConstructor:ReflectionMethod Object ( [name] => __construct [class] => Demo ) 获取参数getParameters:ReflectionParameter Object ( [name] => id ) 获取参数getParameters:ReflectionParameter Object ( [name] => name ) 获取参数getParameters:ReflectionParameter Object ( [name] => skills ) 获取属性getProperty:ReflectionProperty Object ( [name] => name [class] => Demo ) 获取属性列表getProperties:id 获取属性列表getProperties:name 获取属性列表getProperties:skills 获取方法getMethod:ReflectionMethod Object ( [name] => getSkill [class] => Demo ) 获取方法列表getMethods:__construct 获取方法列表getMethods:getName 获取方法列表getMethods:getSkill newInstanceArgs:Demo Object ( [id:Demo:private] => 1 [name:protected] => sai [skills] => Array ( [0] => php [1] => js ) )
La classe ReflectionClass est utilisée dans la démo Bien entendu, la classe ReflectionClass ne se limite pas à ces méthodes.
Plus de méthodes
La classe ReflectionClass a beaucoup plus de méthodes :
Méthode | Description |
---|---|
ReflectionClass::__construct | Initialiser la classe ReflectionClass |
ReflectionClass::export | Exporter une classe |
ReflectionClass::getConstant | Obtenir le défini Une constante |
ReflectionClass::getConstants | Obtenir un ensemble de constantes |
ReflectionClass::getConstructor | Obtenir le constructeur de la classe |
ReflectionClass::getDefaultProperties | Obtenir le propriétés par défaut |
ReflectionClass: ; ReflectionClass: ; ionClass ::getInterfaces | Obtenir l'interface |
ReflectionClass::getMethod | Obtenir la ReflectionMethod d'une méthode de classe. |
ReflectionClass::getMethods | Obtenir le tableau des méthodes |
ReflectionClass::getModifiers | Obtenir les modificateurs de la classe |
ReflectionClass::getName | Obtenir le nom de la classe |
Classe de Réflexion ::getNamespaceName | Obtenir le nom de l'espace de noms |
ReflectionClass::getParentClass | Obtenir la classe parent |
ReflectionClass::getProperties | Obtenir un ensemble de propriétés |
ReflectionClass::getPro perty | Obtenez un attribut d'une classe ReflectionProperty |
ReflectionClass::getReflectionConstant | Obtient un ReflectionClassConstant pour la constante d'une classe |
ReflectionClass::getReflectionConstants | Obtient des constantes de classe |
hortName | Obtenez le nom court |
ReflectionClass: ; ReflectionClass:: getTraitAliases | Renvoie un tableau d'alias de traits |
ReflectionClass::getTraitNames | Renvoie un tableau de noms de traits utilisés par cette classe |
ReflectionClass::getTraits | Renvoie un tableau des traits utilisés par cette classe |
ReflectionClass::hasConstant | Vérifiez si la constante a été définie |
ReflectionClass::hasMethod | Vérifiez si la méthode a été définie |
ReflectionClass::hasProperty | Vérifiez si la propriété a été définie. le la classe est une classe abstraite (abstract) |
ReflectionClass::is Anonymous | Vérifiez si la classe est une classe anonyme |
ReflectionClass::isCloneable | Renvoie si une classe est copiable |
ReflectionClass:: isFinal | Vérifiez si la classe est déclarée finale |
ReflectionClass::isInstance | vérifiez les instances des classes |
ReflectionClass::isInstantiable | Vérifiez si la classe est instanciable |
ReflectionClass::is Interface | Vérifiez si la classe est une interface |
ReflectionClass::isInternal | Vérifiez si la classe est définie en interne par extension ou par noyau |
ReflectionClass::isIterable | Vérifiez si cette classe est itérable |
ReflectionClass:: isIterateable | Vérifie si itérable (itérable) |
ReflectionClass::isSubclassOf | Vérifie s'il s'agit d'une sous-classe |
ReflectionClass::isTrait | renvoie s'il s'agit d'un trait |
ReflectionClass ::isUserDefined | Vérifiez s'il est défini par l'utilisateur |
ReflectionClass::newInstance | From Les arguments spécifiés créent une nouvelle instance de classe |
ReflectionClass::newInstanceArgs | Crée une nouvelle instance de classe à partir des arguments donnés. |
ReflectionClass::newInstanceWithoutConstructor | Créer une nouvelle instance de classe sans appeler son constructeur |
ReflectionClass::setStaticPropertyValue | Définir la valeur d'une propriété statique |
ReflectionClass::__toString | Return ReflectionClass La chaîne représentation de l'objet. |
En plus du puissant ReflectionClass, il existe également Reflection, ReflectionClassConstant, ReflectionMethod, ReflectionFunctionAbstract, etc. Il est recommandé de consulter le manuel : Application pratique de Reflection
Cette section est relativement indépendante, nous l'utiliserons dans les chapitres suivants. Apprentissage recommandé : " Tutoriel vidéo PHP |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!