Explication détaillée des exemples d'utilisation de la classe de réflexion php ReflectionClass

伊谢尔伦
Libérer: 2023-03-12 09:28:02
original
5632 Les gens l'ont consulté

Cet article présente principalement l'utilisation de la classe de réflexion php ReflectionClass et analyse en détail le concept, la fonction et l'utilisation spécifique de la classe de réflexion php sous forme d'exemples. Les amis dans le besoin peuvent se référer à ce qui suit

. Les exemples de cet article décrivent l'utilisation de la classe de réflexion php ReflectionClass. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Regardons d'abord un morceau de code :

/**
 * @name PHP反射API--利用反射技术实现的插件系统架构
 * @author :PHPCQ.COM
 */
interface Iplugin
{
 public static
 function getName();
}
function findPlugins()
{
 $plugins = array();
 foreach(get_declared_classes() as $class)
 {
  $reflectionClass = new ReflectionClass($class);
  if ($reflectionClass - > implementsInterface('Iplugin'))
  {
   $plugins[] = $reflectionClass;
  }
 }
 return $plugins;
}
function computeMenu()
{
 $menu = array();
 foreach(findPlugins() as $plugin)
 {
  if ($plugin - > hasMethod('getMenuItems'))
  {
   $reflectionMethod = $plugin - > getMethod('getMenuItems');
   if ($reflectionMethod - > isStatic())
   {
    $items = $reflectionMethod - > invoke(null);
   }
   else
   {
    $pluginInstance = $plugin - > newInstance();
    $items = $reflectionMethod - > invoke($pluginInstance);
   }
   $menu = array_merge($menu, $items);
  }
 }
 return $menu;
}
function computeArticles()
{
 $articles = array();
 foreach(findPlugins() as $plugin)
 {
  if ($plugin - > hasMethod('getArticles'))
  {
   $reflectionMethod = $plugin - > getMethod('getArticles');
   if ($reflectionMethod - > isStatic())
   {
    $items = $reflectionMethod - > invoke(null);
   }
   else
   {
    $pluginInstance = $plugin - > newInstance();
    $items = $reflectionMethod - > invoke($pluginInstance);
   }
   $articles = array_merge($articles, $items);
  }
 }
 return $articles;
}
require_once('plugin.php');
$menu = computeMenu();
$articles = computeArticles();
print_r($menu);
print_r($articles);
Copier après la connexion

plugin.php Le code est le suivant :

<?php
class MycoolPugin implements Iplugin
{
 public static
 function getName()
 {
  return &#39;MycoolPlugin&#39;;
 }
 public static
 function getMenuItems()
 {
  return array(array(&#39;description&#39; => &#39;MycoolPlugin&#39;, &#39;link&#39; => &#39;/MyCoolPlugin&#39;));
 }
 public static
 function getArticles()
 {
  return array(array(&#39;path&#39; => &#39;/MycoolPlugin&#39;, &#39;title&#39; => &#39;This is a really cool article&#39;, &#39;text&#39; => xxxxxxxxx));
 }
}
Copier après la connexion

Le code ci-dessus est php Une application de classe de réflexion.

Qu'est-ce qu'une classe de réflexion PHP ? Comme son nom l'indique, elle peut être comprise comme un mappage d'une classe.

Par exemple :

class fuc { //定义一个类
 static
 function ec() {
  echo &#39;我是一个类&#39;;
 }
}
$class=new ReflectionClass(&#39;fuc&#39;); //建立 fuc这个类的反射类
Copier après la connexion

Quant à ce qu'il y a dans la classe de réflexion $class, vous pouvez consulter le manuel, qui n'est pas expliqué en détail ici

$fuc=$class->newInstance(); //相当于实例化 fuc 类
$fuc->ec(); //执行 fuc 里的方法ec
/*最后输出:我是一个类*/
Copier après la connexion

Il existe également des utilisations plus avancées

$ec=$class->getmethod(&#39;ec&#39;); //获取fuc 类中的ec方法
$fuc=$class->newInstance(); //实例化
$ec->invoke($fuc);   //执行ec 方法
Copier après la connexion

Le processus ci-dessus devrait vous être familier. En fait, c'est similaire à appeler la méthode d'un objet sauf que c'est inversé ici, avec la méthode devant et l'objet derrière

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