Maison  >  Article  >  développement back-end  >  Proxy dynamique de réflexion PHP

Proxy dynamique de réflexion PHP

藏色散人
藏色散人avant
2019-09-23 09:14:093596parcourir

Reflection peut détecter la structure interne d'une classe et peut être utilisé comme hook pour implémenter des fonctions de plug-in ou comme proxy dynamique.

Liées à la réflexion

Fonctions liées aux classes et aux objets

get_object_vars
get_class_methods
get_class_vars
get_class
get_parent_class
method_exists
property_exists
trait_exists

Classes API liées à la réflexion

reflectiontype
reflectionproperty
reflectionobject
reflectionfunction
reflectionmethod
reflectionexception
reflectionextension
reflectionparameter
reflectionfunctionabstract
reflectiongenerator
reflectionclass
reflectionclassconstant
reflectionzendextension

Réflexion L'API est plus puissante et peut même restaurer le prototype de cette classe, y compris les autorisations d'accès aux méthodes, etc.

Scénarios d'application

L'un consiste à déboguer l'objet, et l'autre consiste à obtenir des informations sur la classe et utilise généralement les méthodes d'application suivantes

La génération de documents l'utilise pour analyser les classes du fichier et générer des documents de description

Développement de plug-ins dans MVC et plug-in développement, la réflexion est couramment utilisée

Inconvénients

La réflexion consomme également beaucoup de performances. De manière générale, essayez de ne pas utiliser

, ce qui détruirait. l'encapsulation de la classe, car la réflexion peut faire en sorte que des choses qui ne le sont pas. Des méthodes ou des propriétés qui devraient être exposées sont forcées d'être exposées.

Instance

Ce qui suit est un simple proxy dynamique de base de données implémenté à l'aide de fonctionnalités de réflexion

Basé sur un proxy dynamique, il y a plus de place pour l'imagination, comme la mise en œuvre d'intercepteurs, l'ajout de méthodes d'attributs, le recadrage, etc.

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

Autres

echo et print sont tous deux des structures de langage, mais ce dernier a une valeur de retour

print_r et var_dump sont des fonctions ordinaires qui peuvent imprimer plusieurs types de données, mais cette dernière affichera les données type, et le deuxième paramètre du premier peut modifier la sortie pour renvoyer

Recommandé : "Tutoriel PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer