Analyse de l'utilisation des compétences de la classe de réflexion php ReflectionClass_php

WBOY
Libérer: 2016-05-16 08:59:52
original
3530 Les gens l'ont consulté

L'exemple de cet article décrit 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

Le code du plugin.php est le suivant :

<&#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));
 }
}

Copier après la connexion

Le code ci-dessus est une application de la classe de réflexion PHP.

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

Copier après la connexion

Quant à ce qu'il y a dans la classe de réflexion $class, vous pouvez consulter le manuel, mais je ne l'expliquerai pas 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('ec'); //获取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 à la méthode d'appel d'un objet

C'est juste que c'est l'inverse, avec la méthode devant et l'objet derrière

Supplémentaire  : Nous recommandons ici un outil de formatage de code PHP en ligne sur ce site Web, qui peut faciliter aux lecteurs la lecture du code PHP compressé formaté en ligne, ce qui est pratique et pratique  !

Outil de formatage et d'embellissement du code php en ligne :
http://tools.jb51.net/code/phpformat

Les lecteurs intéressés par davantage de contenu lié à PHP peuvent consulter les sujets spéciaux de ce site : "Collection complète de compétences opérationnelles PHP array (Array)", "Résumé du tri PHP algorithm", " Résumé des algorithmes et techniques de traversée couramment utilisés en PHP", "Tutoriel sur la structure des données et les algorithmes PHP", "Résumé des algorithmes de programmation PHP", "Résumé des mathématiques PHP des compétences opérationnelles ", "Résumé de l'utilisation des expressions régulières php", "Résumé des opérations PHP et de l'utilisation des opérateurs", "Résumé de l'utilisation de la chaîne PHP (string) " et "Résumé des compétences courantes en matière d'exploitation de base de données PHP "

J'espère que cet article sera utile à tout le monde dans la programmation PHP.

Étiquettes associées:
php
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