Heim > Artikel > Backend-Entwicklung > Dynamischer PHP-Reflection-Proxy
Reflection kann die interne Struktur einer Klasse erkennen und als Hook zur Implementierung von Plug-in-Funktionen oder als dynamischer Proxy verwendet werden.
Reflection-bezogene
Funktionen im Zusammenhang mit Klassen und Objekten
get_object_vars get_class_methods get_class_vars get_class get_parent_class method_exists property_exists trait_exists
Reflection-bezogene API-Klassen
reflectiontype reflectionproperty reflectionobject reflectionfunction reflectionmethod reflectionexception reflectionextension reflectionparameter reflectionfunctionabstract reflectiongenerator reflectionclass reflectionclassconstant reflectionzendextension
Reflection Die API ist leistungsfähiger und kann sogar den Prototyp dieser Klasse wiederherstellen, einschließlich Methodenzugriffsrechten usw.
Anwendungsszenarien
Eines besteht darin, das Objekt zu debuggen und Die andere Möglichkeit besteht darin, Klasseninformationen abzurufen. Es gibt normalerweise die folgenden Anwendungsmethoden.
Die Dokumentgenerierung verwendet sie, um die Klassen in der Datei zu scannen und Beschreibungsdokumente zu generieren.
Plug-in-Entwicklung in MVC und Plug-in Entwicklung, Reflexion wird häufig verwendet
Nachteile
Reflexion verbraucht auch viel Leistung. Versuchen Sie unter normalen Umständen,
nicht zu verwenden Zerstöre die Kapselung der Klasse, da durch Reflexion Dinge entstehen können, die nicht verfügbar sind. Methoden oder Eigenschaften, die offengelegt werden sollten, müssen offengelegt werden
Instanz
Das Folgende ist a einfacher dynamischer Datenbank-Proxy, der mithilfe von Reflexionsfunktionen implementiert wird
Basierend auf dem dynamischen Proxy gibt es mehr Raum für Fantasie, z. B. die Implementierung von Interceptoren, das Hinzufügen von Attributmethoden, das Zuschneiden usw.
class Mysql { function connect($db){ echo "connecting database ${db[0]}\r\n"; } } class SqlProxy { private $target; function __construct($tar){ $this->target[] = new $tar(); } function __call($name, $args){ if($method = $r->getMethod($name)){ if($method->isPublic() && !$method->isAbstract()){ echo "method before record \r\n"; $method->invoke($obj,$args); echo "method after record\r\n"; } } } } } $obj = new SqlProxy('Mysql'); $obj->connect('member');
Andere
echo und print sind beide Sprachstrukturen, aber letztere hat einen Rückgabewert
print_r und var_dump sind gewöhnliche Funktionen, die mehrere Datentypen drucken können, letztere gibt jedoch aus Datentyp, und der zweite Parameter des ersteren kann die Ausgabe so ändern, dass sie
Empfohlen: „PHP Tutorial“
zurückgibtDas obige ist der detaillierte Inhalt vonDynamischer PHP-Reflection-Proxy. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!