Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung des Reflexionsmechanismus in PHP

Detaillierte Erklärung des Reflexionsmechanismus in PHP

小云云
小云云Original
2018-03-30 15:29:091921Durchsuche


PHP5 fügt eine neue Funktion hinzu: Reflection. Diese Funktion ermöglicht es PHP, Klassen, Schnittstellen, Funktionen, Methoden und Erweiterungen zurückzuentwickeln. Durch PHP-Code können Sie alle Informationen eines Objekts abrufen und mit ihm interagieren.
Was ist Reflexion?
Es bezieht sich auf die Erweiterung der Analyse von PHP-Programmen im laufenden Zustand von PHP und das Exportieren oder Extrahieren detaillierter Informationen zu Klassen, Methoden, Eigenschaften, Parametern usw., einschließlich Kommentaren. Diese Funktion zum dynamischen Abrufen von Informationen und zum dynamischen Aufrufen von Methoden von Objekten wird als Reflexions-API bezeichnet. Reflection ist eine API zur Manipulation von Metamodellen im objektorientierten Paradigma. Sie ist sehr leistungsfähig und kann uns beim Erstellen komplexer und skalierbarer Anwendungen helfen.
Zu seinen Einsatzmöglichkeiten gehören: automatisches Laden von Plug-Ins, automatische Generierung von Dokumenten und kann sogar zur Erweiterung der PHP-Sprache verwendet werden.
Die PHP Reflection API besteht aus mehreren Klassen, die uns helfen, auf die Metadaten des Programms zuzugreifen oder mit zugehörigen Anmerkungen zu interagieren. Mit Hilfe der Reflexion können wir die von der Klasse implementierten Methoden abrufen, eine Instanz der Klasse erstellen (anders als beim Erstellen mit new), eine Methode aufrufen (ebenfalls anders als den regulären Aufruf), Parameter übergeben und die Statik dynamisch aufrufen Methoden der Klasse.
Reflection API ist die in PHP integrierte OOP-Technologieerweiterung, einschließlich einiger Klassen, Ausnahmen und Schnittstellen. Zusammen können sie verwendet werden, um uns bei der Analyse anderer Klassen, Schnittstellen, Methoden, Eigenschaften, Methoden und Erweiterungen zu helfen. Diese Oop-Erweiterungen werden als Reflection bezeichnet.
Über ReflectionClass können wir die folgenden Informationen der Person-Klasse erhalten:
1) Konstanten
2) Eigenschaftsnamen
3) Methodennamen statisch
4) Statische Eigenschaften
5) Namespace Namespace
6) Ob die Person-Klasse final oder abstrakt ist „Übergeben Sie sie einfach an ReflectionClass:

1) Holen Sie sich Eigenschaften (Properties):
class Person {  
    /** 
     * For the sake of demonstration, we"re setting this private
     */ 
    private $_allowDynamicAttributes = false;
 
    /** type=primary_autoincrement */
    protected $id = 0;
 
    /** type=varchar length=255 null */
    protected $name;
 
    /** type=text null */
    protected $biography;
 
        public function getId()
        {
        	return $this->id;
        }
        public function setId($v)
        {
           	$this->id = $v;
        }
        public function getName()
        {
       		return $this->name;
        }
        public function setName($v)
        {
         	$this->name = $v;
        }
        public function getBiography()
        {
          	return $this->biography;
        }
        public function setBiography($v)
        {
         	$this->biography = $v;
        }
}


Standardmäßig erhält ReflectionClass alle Eigenschaften, private und geschützte Eigenschaften sind ebenfalls verfügbar. Wenn Sie nur private Eigenschaften erhalten möchten, müssen Sie einen zusätzlichen Parameter übergeben:
$private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);

Verfügbare Parameterliste:
$class = new ReflectionClass('Person');//建立 Person这个类的反射类
$instance  = $class->newInstanceArgs($args);//相当于实例化Person 类
ReflectionProperty::IS_STATIC

ReflectionProperty::IS_PUBLIC

ReflectionProperty::IS_PROTECTED
$properties = $class->getProperties();
foreach($properties as $property) {
    echo $property->getName()."\n";
}
// 输出:
// _allowDynamicAttributes
// id
// name
// biography
ReflectionProperty::IS_PRIVATE

Wenn Sie sowohl öffentliche als auch private Eigenschaften erhalten möchten, schreiben Sie Folgendes: ReflectionProperty::IS_PUBLIC |. ReflectionProperty::IS_PROTECTED.
Der Eigenschaftsname kann über $property->getName() abgerufen werden.


2) Kommentare abrufen:

Sie können die Kommentare über getDocComment an die Unterkunft schreiben lassen.


3) Holen Sie sich die Methoden der Klasse

Holen Sie sich die Methoden (Methoden): Holen Sie sich alle Methoden der Klasse über getMethods().


4) Methoden der Ausführungsklasse:
foreach($properties as $property) {
    if($property->isProtected()) {
        $docblock = $property->getDocComment();
        preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches);
        echo $matches[1]."\n";
    }
}
// Output:
// primary_autoincrement
// varchar
// text

Verwandte Empfehlungen:


Detaillierte Erläuterung des PHP-Reflexionsmechanismus

$instance->getBiography(); //执行Person 里的方法getBiography
//或者:
$ec=$class->getmethod('getName');  //获取Person 类中的getName方法
$ec->invoke($instance);       //执行getName 方法

Detaillierte Erläuterung der automatischen Abhängigkeitsinjektion in PHP basierend auf dem Reflexionsmechanismus

Detaillierte Erläuterung der automatischen Abhängigkeitsinjektion in PHP basierend auf dem Reflexionsmechanismus

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Reflexionsmechanismus in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn