Proxy dynamique de réflexion PHP

藏色散人
Libérer: 2023-04-07 12:52:01
avant
3504 Les gens l'ont consulté

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
Copier après la connexion

Classes API liées à la réflexion

reflectiontype
reflectionproperty
reflectionobject
reflectionfunction
reflectionmethod
reflectionexception
reflectionextension
reflectionparameter
reflectionfunctionabstract
reflectiongenerator
reflectionclass
reflectionclassconstant
reflectionzendextension
Copier après la connexion

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');
Copier après la connexion

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!

Étiquettes associées:
php
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!