Maison php教程 PHP开发 Exemples d'utilisation des classes de réflexion PHP ReflectionClass et ReflectionMethod

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

Dec 23, 2016 pm 12:56 PM
反射

PHP5 dispose d'une API de réflexion complète, ajoutant la possibilité de procéder à l'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 :

<?php
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

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

. 1.ConstantContants
2.Noms de propriétés
3.Noms de méthodes statiques
4.Propriétés statiques
5.Espace de noms
6.Si la classe Person est finale ou abstraite
7. la classe Person a une certaine méthode ?

Ensuite, pour la refléter, transmettez simplement le nom de la classe "Person" à ReflectionClass :

$class = new ReflectionClass(&#39;Person&#39;); // 建立 Person这个类的反射类  
$instance  = $class->newInstanceArgs($args); // 相当于实例化Person 类
Copier après la connexion

1) Récupérez les attributs (Propriétés) :

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

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

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

Liste des paramètres disponibles :

ReflectionProperty::IS_STATIC
ReflectionProperty::IS_PUBLIC
ReflectionProperty::IS_PROTECTED
ReflectionProperty::IS_PRIVATE
Copier après la connexion

Le nom de l'attribut peut être obtenu via $property- >getName() .


2) Obtenir des commentaires :

Vous pouvez obtenir les commentaires écrits sur la propriété via getDocComment.

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

3) Récupérer la méthode de la classe

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

4) Exécuter la méthode de la classe :

$instance->getName(); // 执行Person 里的方法getName
// 或者:
$method = $class->getmethod(&#39;getName&#39;); // 获取Person 类中的getName方法
$method->invoke($instance);    // 执行getName 方法
// 或者:
$method = $class->getmethod(&#39;setName&#39;); // 获取Person 类中的setName方法
$method->invokeArgs($instance, array(&#39;snsgou.com&#39;));
Copier après la connexion

2. Grâce à ReflectionMethod, nous peut obtenir la classe Person Informations sur une certaine méthode :

1. Qu'elle soit de type "public", "protégé", "privé" ou "statique"
2. 🎜>3. Nombre de paramètres de la méthode Number
4. Méthodes de rappel des classes

// 执行detail方法
$method = new ReflectionMethod(&#39;Person&#39;, &#39;test&#39;);
if ($method->isPublic() && !$method->isStatic()) {
 echo &#39;Action is right&#39;;
}
echo $method->getNumberOfParameters(); // 参数个数
echo $method->getParameters(); // 参数对象数组
Copier après la connexion
Pour plus d'articles liés aux exemples d'utilisation de la classe de réflexion PHP ReflectionClass et ReflectionMethod, veuillez prêter attention à le site PHP chinois !

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Implémentation du mécanisme de réflexion des interfaces et des classes abstraites en Java Implémentation du mécanisme de réflexion des interfaces et des classes abstraites en Java May 02, 2024 pm 05:18 PM

Le mécanisme de réflexion permet aux programmes d'obtenir et de modifier des informations de classe au moment de l'exécution. Il peut être utilisé pour implémenter la réflexion d'interfaces et de classes abstraites : Réflexion d'interface : obtenez l'objet de réflexion d'interface via Class.forName() et accédez à ses métadonnées (nom, méthode et champ) . Réflexion de classes abstraites : Semblable aux interfaces, vous pouvez obtenir l'objet de réflexion d'une classe abstraite et accéder à ses métadonnées et méthodes non abstraites. Cas pratique : Le mécanisme de réflexion peut être utilisé pour implémenter des proxys dynamiques, en interceptant les appels aux méthodes d'interface au moment de l'exécution en créant dynamiquement des classes proxy.

Comment utiliser la réflexion pour accéder aux champs et méthodes privés dans Golang Comment utiliser la réflexion pour accéder aux champs et méthodes privés dans Golang May 03, 2024 pm 12:15 PM

Vous pouvez utiliser la réflexion pour accéder aux champs et méthodes privés en langage Go : Pour accéder aux champs privés : obtenez la valeur de réflexion de la valeur via Reflect.ValueOf(), puis utilisez FieldByName() pour obtenir la valeur de réflexion du champ, et appelez le Méthode String() pour imprimer la valeur du champ. Appelez une méthode privée : obtenez également la valeur de réflexion de la valeur via Reflect.ValueOf(), puis utilisez MethodByName() pour obtenir la valeur de réflexion de la méthode, et enfin appelez la méthode Call() pour exécuter la méthode. Cas pratique : modifiez les valeurs des champs privés et appelez des méthodes privées par réflexion pour obtenir le contrôle des objets et la couverture des tests unitaires.

Méthodes pour résoudre l'exception de réflexion Java (ReflectiveOperationException) Méthodes pour résoudre l'exception de réflexion Java (ReflectiveOperationException) Aug 26, 2023 am 09:55 AM

Méthodes pour résoudre les exceptions de réflexion Java (ReflectiveOperationException) Dans le développement Java, la réflexion (Reflection) est un mécanisme puissant qui permet aux programmes d'obtenir et d'exploiter dynamiquement des classes, des objets, des méthodes, des propriétés, etc. Grâce à la réflexion, nous pouvons implémenter certaines fonctions flexibles, telles que la création dynamique d'objets, l'appel de méthodes privées, l'obtention d'annotations de classe, etc. Cependant, l'utilisation de la réflexion entraîne également certains risques et problèmes potentiels, parmi lesquels les anomalies de réflexion (

Comment utiliser la réflexion pour modifier dynamiquement les valeurs des variables dans Golang Comment utiliser la réflexion pour modifier dynamiquement les valeurs des variables dans Golang May 02, 2024 am 11:09 AM

La réflexion du langage Go vous permet de manipuler des valeurs de variables au moment de l'exécution, notamment en modifiant les valeurs booléennes, les entiers, les nombres à virgule flottante et les chaînes. En obtenant la valeur d'une variable, vous pouvez appeler les méthodes SetBool, SetInt, SetFloat et SetString pour la modifier. Par exemple, vous pouvez analyser une chaîne JSON dans une structure, puis utiliser la réflexion pour modifier les valeurs des champs de la structure. Il convient de noter que l'opération de réflexion est lente et que les champs non modifiables ne peuvent pas être modifiés. Lors de la modification de la valeur du champ de structure, les champs associés peuvent ne pas être automatiquement mis à jour.

Introduction à la réflexion Golang et à l'analyse de scénarios d'application Introduction à la réflexion Golang et à l'analyse de scénarios d'application Apr 03, 2024 pm 01:45 PM

La fonctionnalité de réflexion du langage Go permet à un programme d'inspecter et de modifier la structure d'un type au moment de l'exécution. En utilisant Type, Value et Reflect.Kind, nous pouvons obtenir les informations de type, les valeurs de champ et les méthodes de l'objet, et nous pouvons également créer et modifier des objets. Les méthodes d'opération spécifiques incluent : la vérification du type (TypeOf()), l'obtention de la valeur du champ (ValueOf(), FieldByName()), la modification de la valeur du champ (Set()) et la création d'un objet (New()).

Considérations de sécurité et meilleures solutions pour la réflexion Golang Considérations de sécurité et meilleures solutions pour la réflexion Golang May 04, 2024 pm 04:48 PM

Reflection fournit des fonctionnalités de vérification et de modification de type dans Go, mais il présente des risques de sécurité, notamment l'exécution de code arbitraire, la falsification de type et la fuite de données. Les meilleures pratiques incluent la limitation des autorisations et des opérations réfléchissantes, l'utilisation de listes blanches ou de listes noires, la validation des entrées et l'utilisation d'outils de sécurité. En pratique, la réflexion peut être utilisée en toute sécurité pour inspecter les informations de type.

Comment utiliser la réflexion pour créer de nouveaux types dans Golang Comment utiliser la réflexion pour créer de nouveaux types dans Golang May 01, 2024 am 09:21 AM

En utilisant la réflexion, Go permet la création de nouveaux types. 1. Utilisez Reflect.TypeOf() pour obtenir la valeur Reflect.Type d'un type existant ; 2. Utilisez Reflect.New() pour créer une valeur de pointeur d'un nouveau type ; . Via *Ptr.Elem( ) pour accéder à la valeur réelle ; 4. La réflexion peut également créer dynamiquement de nouveaux types basés sur des chaînes, qui sont utilisées pour créer des programmes flexibles et dynamiques.

Utiliser le mécanisme de réflexion Java pour la surcharge de méthodes ? Utiliser le mécanisme de réflexion Java pour la surcharge de méthodes ? Apr 15, 2024 pm 10:54 PM

Le mécanisme de réflexion est utilisé en Java pour implémenter la surcharge de méthode : Obtenir des méthodes par réflexion : utilisez la méthode getMethod() pour obtenir l'objet méthode et spécifiez le nom de la méthode et le type de paramètre. Méthode d’appel : utilisez la méthode Invoke() pour appeler la méthode, en spécifiant l’objet appelant et les valeurs des paramètres.

See all articles