Explication détaillée et exemple d'analyse de la réflexion en php

墨辰丷
Libérer: 2023-03-29 08:08:01
original
1419 Les gens l'ont consulté

Cet article présente principalement la connaissance du contenu de réflexion de PHP. Nous fournissons ici des informations pertinentes et un exemple de code simple pour votre référence. Les amis intéressés peuvent s'y référer

Récemment, je regarde des idées de programmation Java. Dans le chapitre sur les informations de type, nous parlons des informations de classe et du concept de réflexion. Au fait, passons en revue les outils de réflexion de php. Le manuel dit ceci : « PHP 5 dispose d'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. De plus, l'API de réflexion fournit des méthodes pour supprimer des fonctions, des classes et des méthodes. Commentaire de la documentation. "Bien sûr, le manuel est un peu abstrait ! Ce qu'on appelle l'ingénierie inverse signifie que vous pouvez obtenir des informations détaillées sur les classes, les méthodes, les propriétés, les paramètres, etc., y compris les commentaires. Le texte est toujours aussi ennuyeux, par exemple

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
  
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}

$ref = new ReflectionClass('Foo');
$props = $ref->getProperties();
foreach ($props as $value) {
  echo $value->getName()."\n";
}

//output
//foo 
//bar
//baz
Copier après la connexion

ReflectionClass Cette classe renvoie des informations relatives à une certaine classe, telles que les attributs, les méthodes, les espaces de noms, les interfaces implémentées, etc. ! Dans l’exemple précédent, ReflectionClass::getProperties a renvoyé un tableau d’objets ReflectionProperty. La classe

ReflectionProperty rapporte des informations sur les propriétés de la classe. Par exemple, isDefault isPrivate isProtected isPublic isStatic, etc., la méthode getName consiste à obtenir le nom de l'attribut !

Les éléments ci-dessus sont utilisés pour obtenir des attributs, et il existe également des méthodes pour obtenir des méthodes de classe telles que


class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
  
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}

$ref = new ReflectionClass('Foo');
$method = $ref->getMethod('myMethod');
$method->invoke($ref->newInstance());
Copier après la connexion

ReflectionClass::getMethod C'est un type ReflectionMethod. La classe ReflectionMethod rapporte des informations sur une méthode, telle que isAbstract isPrivate isProtected isPublic isStatic isConstructor, et il existe également une méthode importante Invoke, InvokeArgs est la méthode d'exécution !

Pour les autres objets, vous pouvez lire le manuel, ce n'est pas difficile !

A quoi sert la réflexion ?

La réflexion est un concept exécuté de manière dynamique, utilisés ensemble, ils peuvent être utilisés pour nous aider à analyser d'autres classes, interfaces, méthodes, propriétés, méthodes et extensions. Des modèles peuvent également être créés, tels que des proxys dynamiques. Il est également très courant d'utiliser la réflexion dans certains frameworks PHP, tels que kohana et yii. Voici le code de kohana pour implémenter mvc, qui utilise la réflexion !

// Start validation of the controller
$class = new ReflectionClass(ucfirst(Router::$controller).'_Controller');
// Create a new controller instance
$controller = $class->newInstance();
// Load the controller method
$method = $class->getMethod(Router::$method);
// Execute the controller method
$method->invokeArgs($controller, $arguments);
Copier après la connexion

Le code ci-dessus permet de voir clairement le processus de ce framework ! Grâce au routeur, vous traitez réellement la classe url. Grâce au routeur, vous pouvez obtenir quel contrôleur et quelle méthode ! Exécutez ensuite la méthode !

Résumé : 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.

Recommandations associées :

phpExplication détaillée de l'interaction et de l'interface de la plateforme publique WeChat

phpExplication détaillée du téléchargement de fichiers

phpApplication de développement js-sdk du compte public WeChat

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!