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

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

伊谢尔伦
伊谢尔伦Original
2017-07-01 10:44:411412Durchsuche

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;
    }
}

Ü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');


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


Verfügbare Parameterliste:

 $private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);

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

* 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!

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