Dynamischer PHP-Reflection-Proxy

藏色散人
Freigeben: 2023-04-07 12:52:01
nach vorne
3504 Leute haben es durchsucht

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

Reflection-bezogene API-Klassen

reflectiontype
reflectionproperty
reflectionobject
reflectionfunction
reflectionmethod
reflectionexception
reflectionextension
reflectionparameter
reflectionfunctionabstract
reflectiongenerator
reflectionclass
reflectionclassconstant
reflectionzendextension
Nach dem Login kopieren

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

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ückgibt

Das obige ist der detaillierte Inhalt vonDynamischer PHP-Reflection-Proxy. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:learnku.com
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!