Maison  >  Article  >  développement back-end  >  Cours de réflexion en PHP

Cours de réflexion en PHP

不言
不言original
2018-04-26 11:52:502629parcourir

Cet article présente les classes de réflexion en PHP, qui ont une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent se référer à

Exemples d'utilisation des classes de réflexion PHP ReflectionClass et ReflectionMethod.





Auteur : @keenleung

Cet article original par l'auteur, veuillez indiquer la source lors de la réimpression : https://www.cnblogs.com/KeenLeung/p/6041280.html


Table des matières

PHP5 Comprend une API de réflexion complète, ajoutant la possibilité de procéder à une ingénierie inverse des classes, des interfaces, des fonctions, des méthodes et des extensions.

Qu'est-ce que la réflexion ?

Il s'agit d'étendre l'analyse des programmes PHP dans l'état d'exécution de PHP, et d'exporter ou d'extraire des informations détaillées sur les classes, les méthodes, les propriétés, les paramètres, etc., y compris les commentaires. Cette fonction d'obtention dynamique d'informations et d'appel dynamique de méthodes d'objets est appelée API de réflexion. Reflection est une API permettant de manipuler des méta-modèles dans le paradigme orienté objet. Elle est très puissante et peut nous aider à créer des applications complexes et évolutives.

Ses utilisations incluent : le chargement automatique de plug-ins, la génération automatique de documents et peut même être utilisé pour étendre le langage PHP.

L'API de réflexion PHP se compose de plusieurs classes qui nous aident à accéder aux métadonnées du programme ou à interagir avec les annotations associées. Avec l'aide de la réflexion, nous pouvons obtenir les méthodes implémentées par la classe, créer une instance de la classe (différente de la création avec new), appeler une méthode (également différente de l'appel régulier), transmettre des paramètres et appeler dynamiquement le static méthodes de la classe.

L'API Reflection est l'extension de la technologie POO intégrée de PHP, comprenant certaines classes, exceptions et interfaces utilisées ensemble, elles peuvent être utilisées pour nous aider à analyser d'autres classes, interfaces, méthodes, propriétés, méthodes et extensions. Ces extensions POO sont appelées réflexion.

Nous utilisons généralement la classe ReflectionClass et la classe ReflectionMethod, par exemple :

Le code est le suivant :



Cours de réflexion en PHP

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

Cours de réflexion en PHP

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

1. Constantes

2. Noms de propriété
3. 🎜>4. Propriétés statiques
5. Namespace Namespace
6. Si la classe Person est finale ou abstraite
7. Si la classe Person a une certaine méthode

Suivant, reflète-la. transmettez le nom de la classe "Person" à ReflectionClass :

代码如下:



$class = new ReflectionClass('Person'); // 建立 Person这个类的反射类  
$instance  = $class->newInstanceArgs($args); // 相当于实例化Person 类


 

1)获取属性(Properties):

 代码如下:



Cours de réflexion en PHP

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

Cours de réflexion en PHP

 

默认情况下,ReflectionClass会获取到所有的属性,private 和 protected的也可以。如果只想获取到private属性,就要额外传个参数:

代码如下:



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


 

可用参数列表:

代码如下:



ReflectionProperty::IS_STATIC
ReflectionProperty::IS_PUBLIC
ReflectionProperty::IS_PROTECTED
ReflectionProperty::IS_PRIVATE


 通过$property->getName()可以得到属性名。

 

2)获取注释:

通过getDocComment可以得到写给property的注释。

代码如下:



Cours de réflexion en PHP

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

Cours de réflexion en PHP

 

3)获取类的方法

 代码如下:


getMethods()       来获取到类的所有methods。
hasMethod(string)  是否存在某个方法
getMethod(string)  获取方法


 

 4)执行类的方法:

代码如下:



Cours de réflexion en PHP

->getName();  = ->getmethod('getName'); ->invoke();     = ->getmethod('setName'); ->invokeArgs(, ('snsgou.com'

Cours de réflexion en PHP

 

二、通过ReflectionMethod,我们可以得到Person类的某个方法的信息:

1.是否“public”、“protected”、“private” 、“static”类型
2.方法的参数列表
3.方法的参数个数
4.反调用类的方法

代码如下:



Cours de réflexion en PHP

// 执行detail方法
$method = new ReflectionMethod('Person', 'test'); 

if ($method->isPublic() && !$method->isStatic()) { 
echo 'Action is right';
}echo $method->getNumberOfParameters(); // 参数个数
echo $method->getParameters(); // 参数对象数组

Cours de réflexion en PHP

 

 

----->>>

相关推荐:

php中的时间函数

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!

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