Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erläuterung des Beispiels für den Reflexionsmechanismus von PHP Reflection

Detaillierte Erläuterung des Beispiels für den Reflexionsmechanismus von PHP Reflection

伊谢尔伦
Freigeben: 2023-03-12 09:18:02
Original
1474 Leute haben es durchsucht

PHP5 fügt eine neue Funktion hinzu: Reflection. Mit dieser Funktion können Programmierer

Klassen, Schnittstellen, Funktionen, Methoden und Erweiterungen zurückentwickeln [Unterstützung für Erweiterungsbibliotheken].

Über den PHP-Code können Sie alle Informationen eines Objekts abrufen und mit ihm interagieren.

Nehmen Sie die folgende Personenklasse an:

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;
    }
}
Nach dem Login kopieren

Über ReflectionClass können wir die folgenden Informationen der Personenklasse erhalten:

  • Konstanten

  • Eigenschaftseigenschaften

  • Methodennamen

  • Statische Eigenschaften 🎜>

  • Namespace
  • Namespace

    Ob die Personenklasse endgültig oder abstrakt ist
  • Geben Sie einfach den Klassennamen „Person“ ein, der an ReflectionClass übergeben werden kann:

* Eigenschaften abrufen (Eigenschaften):
 $class = new ReflectionClass('Person');
Nach dem Login kopieren


Standard In diesem Fall ruft ReflectionClass alle Eigenschaften ab, einschließlich privater und geschützter. Wenn Sie nur das private Attribut erhalten möchten, müssen Sie einen zusätzlichen Parameter übergeben:

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


Verfügbare Parameterliste:

 $private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);
Nach dem Login kopieren

ReflectionProperty ::IS_STATIC
  • ReflectionProperty::IS_PUBLIC
  • ReflectionProperty::IS_PROTECTED
  • ReflectionProperty::IS_PRIVATE
  • Wenn Sie sowohl öffentliche als auch private Eigenschaften erhalten möchten, schreiben Sie einfach so: ReflectionProperty::IS_PUBLIC |. ReflectionProperty::IS_PROTECTED
über $property ->getName() Sie können den Eigenschaftsnamen abrufen und die in die Eigenschaft geschriebenen Kommentare über getDocComment abrufen.


Es ist ein bisschen unglaublich. Sie können sogar Kommentare erhalten.

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
Nach dem Login kopieren

* Methoden (Methoden) abrufen

: Alle Methoden der Klasse über getMethods() abrufen. Was zurückgegeben wird, ist ein

Array von ReflectionMethod-Objekten. Keine Demonstrationen mehr.

* Rufen Sie abschließend die Methode in der Klasse über ReflectionMethod auf.


Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispiels für den Reflexionsmechanismus von PHP Reflection. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage