Maison > développement back-end > tutoriel php > Explication détaillée de l'exemple de mécanisme de réflexion php Reflection

Explication détaillée de l'exemple de mécanisme de réflexion php Reflection

伊谢尔伦
Libérer: 2023-03-12 09:18:02
original
1512 Les gens l'ont consulté

PHP5 ajoute une nouvelle fonctionnalité : La réflexion. Cette fonctionnalité permet aux programmeurs de

effectuer une rétro-ingénierie de classe, d'interface, de fonction, de méthode et d'extension [prise en charge de la bibliothèque d'extensions].

Grâce au code PHP, vous pouvez obtenir toutes les informations d'un objet et interagir avec lui.

Supposons la classe Person suivante :

class Person {
    /**
     * For the sake of demonstration, we"re setting this private
     */
    private $_allowDynamicAttributes = false;
    
    /**
     * type=primary_autoincrement
     */
    protected $id = 0;
    
    /**
     * type=varchar length=255 null
     */
    protected $name;
    
    /**
     * type=text null
     */
    protected $biography;
    public function getId() {
        return $this->id;
    }
    public function setId($v) {
        $this->id = $v;
    }
    public function getName() {
        return $this->name;
    }
    public function setName($v) {
        $this->name = $v;
    }
    public function getBiography() {
        return $this->biography;
    }
    public function setBiography($v) {
        $this->biography = $v;
    }
}
Copier après la connexion

Grâce à ReflectionClass, nous pouvons obtenir les informations suivantes de la classe Person :

  • Constantes

  • Propriétés de propriété

  • Noms de méthodes

  • Propriétés statiques 🎜>

  • Espace de noms
  • Espace de noms

    Que la classe Person soit finale ou abstraite
  • Mettez simplement le nom de la classe « Person » peut être transmis à ReflectionClass :

* Obtenir les propriétés (Propriétés) :
 $class = new ReflectionClass('Person');
Copier après la connexion


Par défaut Dans ce cas, ReflectionClass obtiendra toutes les propriétés, y compris les privés et les protégés. Si vous souhaitez uniquement obtenir l'attribut privé, vous devez passer un paramètre supplémentaire :

$properties = $class->getProperties();
foreach($properties as $property) {
    echo $property->getName()."\n";
}
// 输出:
// _allowDynamicAttributes
// id
// name
// biography
Copier après la connexion


Liste des paramètres disponibles :

 $private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);
Copier après la connexion

ReflectionProperty ::IS_STATIC
  • ReflectionProperty::IS_PUBLIC
  • ReflectionProperty::IS_PROTECTED
  • ReflectionProperty:: IS_PRIVATE
  • Si vous souhaitez obtenir des propriétés publiques et privées, écrivez simplement comme ceci : ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED
via $property ->getName() Vous pouvez obtenir le nom de la propriété et obtenir les commentaires écrits sur la propriété via getDocComment.


C'est un peu incroyable. Vous pouvez même obtenir des commentaires.

foreach($properties as $property) {
    if($property->isProtected()) {
        $docblock = $property->getDocComment();
        preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches);
        echo $matches[1]."\n";
    }
}
// Output:
// primary_autoincrement
// varchar
// text
Copier après la connexion

* Get méthodes (méthodes)

 : Obtenez toutes les méthodes de la classe via getMethods(). Ce qui est renvoyé est un

tableau d'objets ReflectionMethod. Plus de manifestations.

* Enfin, appelez la méthode dans la classe via ReflectionMethod.


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:
source:php.cn
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