Maison  >  Article  >  développement back-end  >  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

伊谢尔伦
伊谢尔伦original
2017-07-01 10:44:411461parcourir

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;
    }
}

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


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


Liste des paramètres disponibles :

 $private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);

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

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

Déclaration:
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