当前位置:首页 > PHP教程 > php类库 > 列表

php反射类ReflectionClass用法分析

发布:smiling 来源: PHP粉丝网  添加日期:2021-08-03 15:35:44 浏览: 评论:0 

这篇文章主要介绍了php反射类ReflectionClass用法,结合实例形式较为详细的分析了php反射类的概念、功能与具体使用方法,需要的朋友可以参考下。

本文实例讲述了php反射类ReflectionClass用法,分享给大家供大家参考,具体如下:

先来看一段代码:

  1. /** 
  2.  * @name PHP反射API--利用反射技术实现的插件系统架构 
  3.  * @author :PHPCQ.COM 
  4.  */ 
  5. interface Iplugin 
  6.  public static 
  7.  function getName(); 
  8. function findPlugins() 
  9.  $plugins = array(); 
  10.  foreach(get_declared_classes() as $class
  11.  { 
  12.   $reflectionClass = new ReflectionClass($class); 
  13.   if ($reflectionClass - > implementsInterface('Iplugin')) 
  14.   { 
  15.    $plugins[] = $reflectionClass
  16.   } 
  17.  } 
  18.  return $plugins
  19. function computeMenu() 
  20.  $menu = array(); 
  21.  foreach(findPlugins() as $plugin
  22.  { 
  23.   if ($plugin - > hasMethod('getMenuItems')) 
  24.   { 
  25.    $reflectionMethod = $plugin - > getMethod('getMenuItems'); 
  26.    if ($reflectionMethod - > isStatic()) 
  27.    { 
  28.     $items = $reflectionMethod - > invoke(null); 
  29.    } 
  30.    else 
  31.    { 
  32.     $pluginInstance = $plugin - > newInstance(); 
  33.     $items = $reflectionMethod - > invoke($pluginInstance); 
  34.    } 
  35.    $menu = array_merge($menu$items); 
  36.   } 
  37.  } 
  38.  return $menu
  39. function computeArticles() 
  40.  $articles = array(); 
  41.  foreach(findPlugins() as $plugin
  42.  { 
  43.   if ($plugin - > hasMethod('getArticles')) 
  44.   { 
  45.    $reflectionMethod = $plugin - > getMethod('getArticles'); 
  46.    if ($reflectionMethod - > isStatic()) 
  47.    { 
  48.     $items = $reflectionMethod - > invoke(null); 
  49.    } 
  50.    else 
  51.    { 
  52.     $pluginInstance = $plugin - > newInstance(); 
  53.     $items = $reflectionMethod - > invoke($pluginInstance); 
  54.    } 
  55.    $articles = array_merge($articles$items); 
  56.   } 
  57.  } 
  58.  return $articles
  59. require_once('plugin.php'); 
  60. $menu = computeMenu(); 
  61. $articles = computeArticles(); 
  62. print_r($menu); 
  63. print_r($articles); 

plugin.php 代码如下:

  1. <?php 
  2. class MycoolPugin implements Iplugin 
  3.  public static 
  4.  function getName() 
  5.  { 
  6.   return 'MycoolPlugin'
  7.  } 
  8.  public static 
  9.  function getMenuItems() 
  10.  { 
  11.   return array(array('description' => 'MycoolPlugin''link' => '/MyCoolPlugin')); 
  12.  } 
  13.  public static 
  14.  function getArticles() 
  15.  { 
  16.   return array(array('path' => '/MycoolPlugin''title' => 'This is a really cool article''text' => xxxxxxxxx)); 
  17.  } 

上述代码是php反射类的一个应用。

什么是php反射类,顾名思义,可以理解为一个类的映射。

举个例子:

  1. class fuc { //定义一个类 
  2.  static 
  3.  function ec() { 
  4.   echo '我是一个类'
  5.  } 
  6. $class=new ReflectionClass('fuc'); //建立 fuc这个类的反射类 

至于$class 这反射类里有什么东东,可以查看手册,这里不详解了

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

其中还有一些更高级的用法

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

上面的过程很熟悉吧,其实和调用对象的方法类似

只不过这里是反着来的,方法在前,对象在后

Tags: php反射类 ReflectionClass

分享到: