Maison > Article > développement back-end > Proxy dynamique de réflexion PHP
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!