Maison > développement back-end > tutoriel php > Introduction au mécanisme de réflexion Reflection de PHP

Introduction au mécanisme de réflexion Reflection de PHP

不言
Libérer: 2023-04-02 15:06:01
original
1317 Les gens l'ont consulté

Cet article présente principalement le mécanisme de réflexion de PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

PHP5 ajoute. une nouvelle fonctionnalité : 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 :

 1 class Person { 
 2     /** 
 3      * For the sake of demonstration, we"re setting this private 
 4      */ 
 5     private $_allowDynamicAttributes = false; 
 6      
 7     /** 
 8      * type=primary_autoincrement 
 9      */
 10     protected $id = 0;
 11     
 12     /**
 13      * type=varchar length=255 null
 14      */
 15     protected $name;
 16     
 17     /**
 18      * type=text null19      */
 20     protected $biography;
 21     public function getId() {
 22         return $this->id;
 23     }
 24     public function setId($v) {
 25         $this->id = $v;
 26     }
 27     public function getName() {
 28         return $this->name;
 29     }
 30     public function setName($v) {
 31         $this->name = $v;
 32     }
 33     public function getBiography() {
 34         return $this->biography;
 35     }
 36     public function setBiography($v) {
 37         $this->biography = $v;
 38     }
 39 }
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 d'espace de noms
  • Que la classe Person soit finale ou abstraite
  • Passez simplement le nom de la classe "Person" à ReflectionClass OK :

* Obtenir les propriétés :

1 $class = new ReflectionClass('Person');
Copier après la connexion

Par défaut, ReflectionClass obtiendra toutes les propriétés, privées et protégées sont également disponibles. Si vous souhaitez uniquement obtenir l'attribut privé, vous devez passer un paramètre supplémentaire :

1 $properties = $class->getProperties();2 foreach($properties as $property) {
3     echo $property->getName()."\n";4 }
5 // 输出:6 // _allowDynamicAttributes7 // id8 // name9 // biography
Copier après la connexion

Liste des paramètres disponibles :

1 $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 à la fois des propriétés publiques et privées, écrivez simplement comme ceci : ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED
Vous pouvez obtenir le nom de la propriété via $property-> getName(), et vous pouvez l'obtenir via getDocComment Commentaires écrits dans la propriété.

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

 1 foreach($properties as $property) {
 2     if($property->isProtected()) { 
 3         $docblock = $property->getDocComment(); 
 4         preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches); 
 5         echo $matches[1]."\n"; 
 6     } 
 7 } 
 8 // Output: 
 9 // primary_autoincrement
 10 // varchar
 11 // text
Copier après la connexion
* Get 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 représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

$data = array("id" => 1, "name" => "Chris", "biography" => "I am am a PHP developer");
foreach($data as $key => $value) {    
if(!$class->hasProperty($key)) {        
throw new Exception($key." is not a valid property");
    } 
    if(!$class->hasMethod("get".ucfirst($key))) {        
    throw new Exception($key." is missing a getter");
    } 
    if(!$class->hasMethod("set".ucfirst($key))) {        
    throw new Exception($key." is missing a setter");
    } 
    // Make a new object to interact with
    $object = new Person(); 
    // Get the getter method and invoke it with the value in our data array
    $setter = $class->getMethod("set".ucfirst($key));    
    $ok = $setter->invoke($object, $value); 
    // Get the setter method and invoke it
    $setter = $class->getMethod("get".ucfirst($key));    
    $objValue = $setter->invoke($object); 
    // Now compare
    if($value == $objValue) {        
    echo "Getter or Setter has modified the data.\n";
    } else {        
    echo "Getter and Setter does not modify the data.\n";
   }
}
Copier après la connexion
Recommandations associées :

Comment explorer le contenu Web et les images avec php

Classe de barre de progression de l'importation PHP

Portée 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:
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