Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der Anwendungsbeispiele der PHP-Reflexionsklasse ReflectionClass

Ausführliche Erläuterung der Anwendungsbeispiele der PHP-Reflexionsklasse ReflectionClass

伊谢尔伦
伊谢尔伦Original
2017-07-01 10:57:115607Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung der PHP-Reflexionsklasse ReflectionClass vorgestellt und das Konzept, die Funktion und die spezifische Verwendung der PHP-Reflexionsklasse anhand von Beispielen im Detail analysiert

Die Beispiele in diesem Artikel beschreiben die Verwendung der PHP-Reflexionsklasse ReflectionClass. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Schauen wir uns zunächst einen Code an:

/**
 * @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);

plugin.php Der Code lautet wie folgt:

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

Der obige Code ist eine PHP-Anwendung der Reflection-Klasse.

Was ist eine PHP-Reflexionsklasse? Wie der Name schon sagt, kann sie als Zuordnung einer Klasse verstanden werden.

Zum Beispiel:

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

Was in der $class-Reflexionsklasse enthalten ist, können Sie im Handbuch nachlesen, das hier nicht im Detail erklärt wird

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

Es gibt auch einige fortgeschrittenere Verwendungen

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

Der obige Vorgang sollte Ihnen bekannt sein. Tatsächlich ähnelt es dem Aufruf der Methode eines Objekts , außer dass es hier umgekehrt ist, mit der Methode vorne und dem Objekt hinten

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Anwendungsbeispiele der PHP-Reflexionsklasse ReflectionClass. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn