Heim Backend-Entwicklung PHP-Tutorial Detaillierte Erläuterung der Prinzipien und Verwendung des Reflexionsmechanismus in PHP mit Bildern und Text

Detaillierte Erläuterung der Prinzipien und Verwendung des Reflexionsmechanismus in PHP mit Bildern und Text

May 25, 2018 pm 02:31 PM
php Grafiken und Text 用法

Dieser Artikel stellt hauptsächlich das Prinzip und die Verwendung des PHP-Reflexionsmechanismus vor und analysiert das Prinzip, die Verwendung und die damit verbundenen Vorsichtsmaßnahmen in Form von Beispielen. Freunde in Not können sich darauf beziehen

Dieser Artikel beschreibt PHP mit Beispielen, Prinzipien und Verwendung des Reflexionsmechanismus. Teilen Sie es wie folgt als Referenz mit allen:

Reflexion

Bei der objektorientierten Programmierung erhalten Objekte die Fähigkeit zur Selbstbeobachtung, und dieser Selbstbeobachtungsprozess ist Reflexion .

Reflexion, intuitives Verständnis besteht darin, den Ausgangspunkt und die Quelle anhand des Ankunftsorts zu finden. Beispielsweise können wir bei einem bloßen Objekt allein durch dieses Objekt erkennen, zu welcher Klasse es gehört und welche Methoden es hat.

Reflexion bezieht sich auf 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.

So verwenden Sie die Reflection-API

<?php
class person{
public $name;
public $gender;
public function say(){
  echo $this->name," \tis ",$this->gender,"\r\n";
}
public function set($name, $value) {
  echo "Setting $name to $value \r\n";
  $this->$name= $value;
}
public function get($name) {
  if(!isset($this->$name)){
    echo &#39;未设置&#39;;
       
     $this->$name="正在为你设置默认值";
  }
  return $this->$name;
  }
}
$student=new person();
$student->name=&#39;Tom&#39;;
$student->gender=&#39;male&#39;;
$student->age=24;
Nach dem Login kopieren

Was ist nun zu tun, um die Methoden- und Eigenschaftenliste dafür zu erhalten? Studentenobjekt Wolltuch? Wie im folgenden Code gezeigt:

// 获取对象属性列表
$reflect = new ReflectionObject($student);
$props = $reflect->getProperties();
foreach ($props as $prop) {
  print $prop->getName() ."\n";
}
// 获取对象方法列表
$m=$reflect->getMethods();
foreach ($m as $prop) {
  print $prop->getName() ."\n";
}
Nach dem Login kopieren

Sie können anstelle der Reflection-API auch die Klassenfunktion verwenden, um ein assoziatives Array von Objekteigenschaften und weitere Informationen zurückzugeben:

// 返回对象属性的关联数组
var_dump(get_object_vars($student));
// 类属性
var_dump(get_class_vars(get_class($student)));
// 返回由类的方法名组成的数组
var_dump(get_class_methods(get_class($student)));
Nach dem Login kopieren

Wenn dieses Objekt von anderen Seiten übergeben wird, woher wissen Sie dann, zu welcher Klasse es gehört? Sie können es mit nur einer Codezeile erledigen:

// 获取对象属性列表所属的类
echo get_class($student);
Nach dem Login kopieren

Die Reflection-API ist offensichtlich leistungsfähiger und kann sogar den Prototyp dieser Klasse einschließlich der Methode wiederherstellen Zugriffsberechtigungen usw., wie zum Beispiel:

// 反射获取类的原型
$obj = new ReflectionClass(&#39;person&#39;);
$className = $obj->getName();
$Methods = $Properties = array();
foreach($obj->getProperties() as $v)
{
    $Properties[$v->getName()] = $v;
}
foreach($obj->getMethods() as $v)
   
 {
    $Methods[$v->getName()] = $v;
}
echo "class {$className}\n{\n";
is_array($Properties)&&ksort($Properties);
foreach($Properties as $k => $v)
{
    echo "\t";
    echo $v->isPublic() ? &#39; public&#39; : &#39;&#39;,$v->isPrivate() ? &#39; private&#39; : &#39;&#39;,
    $v->isProtected() ? &#39; protected&#39; : &#39;&#39;,
    $v->isStatic() ? &#39; static&#39; : &#39;&#39;;
    echo "\t{$k}\n";
}
echo "\n";
if(is_array($Methods)) ksort($Methods);
foreach($Methods as $k => $v)
{
    echo "\tfunction {$k}(){}\n";
}
echo "}\n";
Nach dem Login kopieren

Die Ausgabe lautet wie folgt:

class person
{
  public gender
  public name
  function get(){}
  function set(){}
  function say(){}
}
Nach dem Login kopieren

Darüber hinaus gibt es Dutzende weitere PHP-Handbücher zur Reflection-API. Man kann sagen, dass Reflection den Prototyp einer Klasse oder eines Objekts vollständig beschreibt. Reflection kann nicht nur für Klassen und Objekte verwendet werden, sondern auch für Funktionen, Erweiterungsmodule, Ausnahmen usw.

Welche Rolle spielt die Reflexion?

Reflexion kann zur Dokumentenerstellung genutzt werden. Daher können Sie damit die Klassen in der Datei scannen und nacheinander Beschreibungsdokumente generieren.

Da Reflektion die interne Struktur einer Klasse erkennen kann, kann sie als Hook für die Implementierung von Plug-In-Funktionen verwendet werden? Oder ist es ein dynamischer Proxy?

Zum Beispiel:

<?php
class mysql {
  function connect($db) {
    echo "连接到数据库${db[0]}\r\n";
  }
}
class sqlproxy {
  private $target;  
  function construct($tar) { 
    $this->target[] = new $tar();
  }
  function call($name, $args) {
    foreach ($this->target as $obj) {
      $r = new ReflectionClass($obj);
      if ($method = $r->getMethod($name)) {
        if ($method->isPublic() && !$method->isAbstract()) {
          echo "方法前拦截记录LOG\r\n";
          $method->invoke($obj, $args);
          echo "方法后拦截\r\n";
        }
      }
    }
  }
}
$obj = new sqlproxy(&#39;mysql&#39;);
$obj->connect(&#39;member&#39;);
Nach dem Login kopieren

In der normalen Entwicklung gibt es nicht viele Orte, an denen Reflexion verwendet wird: Einer dient zum Debuggen von Objekten und der andere other ist Klasseninformationen abrufen. In der MVC- und Plug-In-Entwicklung ist die Verwendung von Reflektion sehr verbreitet, aber Reflektion ist auch sehr teuer. Missbrauchen Sie sie nicht, wenn Sie eine Alternative finden können.

PHP verfügt über die Token-Funktion, die über diesen Mechanismus einige Reflexionsfunktionen implementieren kann. Aus Gründen der Einfachheit und Flexibilität empfiehlt es sich, die bereits bereitgestellte Reflection-API zu verwenden.

Oft kann eine gute Verwendung von Reflektion den Code elegant und prägnant halten, aber Reflektion kann auch die Kapselung der Klasse zerstören, da Reflektion die Offenlegung von Methoden oder Eigenschaften erzwingen kann, die nicht verfügbar gemacht werden sollten Beide Vorteile sind auch Nachteile.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich sein wird.


Verwandte Empfehlungen:

PHP objektorientiert ReflexionFunktion und Verwendung

PHPReflectionDetaillierte Erläuterung der Mechanismusbeispiele

PHP-KlasseReflectionDetaillierte Erläuterung der zu implementierenden Schritte Abhängigkeitsinjektion

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Prinzipien und Verwendung des Reflexionsmechanismus in PHP mit Bildern und Text. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

CakePHP-Protokollierung CakePHP-Protokollierung Sep 10, 2024 pm 05:26 PM

Die Anmeldung bei CakePHP ist eine sehr einfache Aufgabe. Sie müssen nur eine Funktion verwenden. Sie können Fehler, Ausnahmen, Benutzeraktivitäten und von Benutzern durchgeführte Aktionen für jeden Hintergrundprozess wie Cronjob protokollieren. Das Protokollieren von Daten in CakePHP ist einfach. Die Funktion log() wird bereitgestellt

See all articles