Heim > Artikel > Backend-Entwicklung > Einführung in die Reflexion des handgeschriebenen PHP-API-Frameworks (3)
Im vorherigen Artikel „Handgeschriebenes PHP-API-Framework – Composer-Installation und -Nutzung (2)“ haben wir die Installation und Verwendung von Composer vorgestellt. In diesem Artikel stellen wir das Konzept der Reflexion vor.
Reflexion, intuitives Verständnis besteht darin, den Abfahrtsort und die Quelle basierend auf dem Ankunftsort zu finden. Unter Reflexion versteht man die Erweiterung der Analyse von PHP-Programmen im laufenden Zustand von PHP, das Exportieren oder Vorschlagen detaillierter Informationen zu Klassen, Methoden, Eigenschaften, Parametern usw., einschließlich Kommentaren. Diese Funktion zum dynamischen Abrufen von Informationen und zum dynamischen Aufrufen von Objektmethoden wird als Reflexions-API bezeichnet.
Schauen wir uns zunächst eine Demo an:
<?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);
Ausgabe:
➜ 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 ) )
Die ReflectionClass-Klasse wird in der Demo natürlich nicht auf diese Methoden beschränkt.
Weitere Methoden
Die ReflectionClass-Klasse verfügt über viele weitere Methoden:
Methode | Beschreibung |
---|---|
ReflectionClass::__construct | Initialisieren Sie die ReflectionClass-Klasse |
ReflectionClass::export | Eine Klasse exportieren |
ReflectionClass::getConstant | Erhalten Sie die Definition Eine Konstante |
ReflectionClass::getConstants | Erhalten Sie eine Reihe von Konstanten |
ReflectionClass::getConstructor | Erhalten Sie den Konstruktor der Klasse die Standardeigenschaften |
ReflectionClass: ; | |
Erhalten Sie das Array von Methoden Name | |
Den Namen des Namespace abrufen | |
Die übergeordnete Klasse abrufen | |
Eine Reihe von Eigenschaften abrufen | |
Holen Sie sich ein Attribut einer Klasse ReflectionProperty | |
Ruft eine ReflectionClassConstant für die Konstante einer Klasse ab | |
Ruft Klassenkonstanten ab | |
Holen Sie sich den Kurznamen | ReflectionClass: ; |
ReflectionClass::hasConstant | |
ReflectionClass::hasMethod | |
ReflectionClass::hasProperty | |
Überprüfen Sie, ob die Klasse als final deklariert ist Klasse::isInterface | Überprüfen Sie, ob die Klasse eine Schnittstelle ist |
ReflectionClass::isInternal | Überprüfen Sie, ob die Klasse intern durch Erweiterung oder Kern definiert ist |
ReflectionClass::isIterable | Überprüfen Sie, ob diese Klasse iterierbar ist |
ReflectionClass:: isIterateable | Überprüfen Sie, ob iterierbar (iterierbar) |
ReflectionClass::isSubclassOf | Überprüfen Sie, ob es sich um eine Unterklasse handelt |
ReflectionClass::isTrait | gibt zurück, ob es sich um ein Merkmal handelt |
ReflectionClass::isUserDefined | Überprüfen Sie, ob es vom Benutzer definiert ist. |
ReflectionClass::newInstanceWithoutConstructor | Erstellen Sie eine neue Klasseninstanz, ohne ihren Konstruktor aufzurufen. |
ReflectionClass::setStaticPropertyValue. Legen Sie den Wert einer statischen Eigenschaft fest String | Return ReflectionClass Der String Darstellung des Objekts. |
Das obige ist der detaillierte Inhalt vonEinführung in die Reflexion des handgeschriebenen PHP-API-Frameworks (3). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!