Heim >Backend-Entwicklung >PHP-Tutorial >Nutzungsanalyse der Fähigkeiten der PHP-Reflexionsklasse ReflectionClass_php

Nutzungsanalyse der Fähigkeiten der PHP-Reflexionsklasse ReflectionClass_php

WBOY
WBOYOriginal
2016-05-16 08:59:523583Durchsuche

Das Beispiel in diesem Artikel beschreibt 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-Code lautet wie folgt:

<&#63;php
class MycoolPugin implements Iplugin
{
 public static
 function getName()
 {
  return 'MycoolPlugin';
 }
 public static
 function getMenuItems()
 {
  return array(array('description' => 'MycoolPlugin', 'link' => '/MyCoolPlugin'));
 }
 public static
 function getArticles()
 {
  return array(array('path' => '/MycoolPlugin', 'title' => 'This is a really cool article', 'text' => xxxxxxxxx));
 }
}

Der obige Code ist eine Anwendung der PHP-Reflexionsklasse.

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 '我是一个类';
 }
}
$class=new ReflectionClass('fuc'); //建立 fuc这个类的反射类

Was in der Reflexionsklasse $class enthalten ist, können Sie im Handbuch nachlesen, aber ich werde es hier nicht im Detail erklären

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

Es gibt auch einige fortgeschrittenere Verwendungsmöglichkeiten

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

Der obige Vorgang sollte bekannt sein. Tatsächlich ähnelt es der Methode zum Aufrufen eines Objekts

Es ist nur umgekehrt, mit der Methode vorne und dem Objekt hinten

Ergänzung : Hier empfehlen wir ein Online-PHP-Code-Formatierungstool auf dieser Website, das den Lesern das Lesen des online formatierten komprimierten PHP-Codes erleichtern kann, was bequem und praktisch ist !

Online-Formatierungs- und Verschönerungstool für PHP-Code:
http://tools.jb51.net/code/phpformat

Leser, die an mehr PHP-bezogenen Inhalten interessiert sind, können sich die speziellen Themen dieser Website ansehen: „Umfassende Sammlung von Fähigkeiten zum Betrieb von PHP-Arrays (Arrays)“, „Zusammenfassung der PHP-Sortierung Algorithmus", " Zusammenfassung häufig verwendeter Traversierungsalgorithmen und -techniken in PHP", "Tutorial zu PHP-Datenstruktur und -Algorithmen", "Zusammenfassung der PHP-Programmieralgorithmen", "PHP-Mathematik Zusammenfassung der Betriebsfähigkeiten ", "Zusammenfassung der Verwendung regulärer PHP-Ausdrücke", "Zusammenfassung der PHP-Operationen und der Operatorverwendung", „Zusammenfassung der Verwendung von PHP-Strings (Strings) “ und „Zusammenfassung allgemeiner Kenntnisse im Umgang mit PHP-Datenbanken

Ich hoffe, dass dieser Artikel für alle, die sich mit PHP-Programmierung befassen, hilfreich sein wird.

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