Heim  >  Artikel  >  Backend-Entwicklung  >  Dynamischer PHP-Reflection-Proxy

Dynamischer PHP-Reflection-Proxy

藏色散人
藏色散人nach vorne
2019-09-23 09:14:093596Durchsuche

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

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen