加入收藏 | 设为首页 | 会员中心 | 我要投稿 菏泽站长网 (https://www.0530zz.cn/)- 数据工坊、负载均衡、数据快递、云计算、事件网格!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php反射类ReflectionClass用法分析

发布时间:2022-06-20 09:13:09 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了php反射类ReflectionClass用法,结合实例形式较为详细的分析了php反射类的概念、功能与具体使用方法,需要的朋友可以参考下。 本文实例讲述了php反射类ReflectionClass用法,分享给大家供大家参考,具体如下: 先来看一段代码: /** * @name
  这篇文章主要介绍了php反射类ReflectionClass用法,结合实例形式较为详细的分析了php反射类的概念、功能与具体使用方法,需要的朋友可以参考下。
 
  本文实例讲述了php反射类ReflectionClass用法,分享给大家供大家参考,具体如下:
 
  先来看一段代码:
 
  /**
   * @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 代码如下:
 
  <?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));
   }
  }
  上述代码是php反射类的一个应用。
 
  什么是php反射类,顾名思义,可以理解为一个类的映射。
 
  举个例子:
 
  class fuc { //定义一个类
   static
   function ec() {
    echo '我是一个类';
   }
  }
  $class=new ReflectionClass('fuc'); //建立 fuc这个类的反射类
  至于$class 这反射类里有什么东东,可以查看手册,这里不详解了
 
  $fuc=$class->newInstance(); //相当于实例化 fuc 类
  $fuc->ec(); //执行 fuc 里的方法ec
  /*最后输出:我是一个类*/
  其中还有一些更高级的用法
 
  $ec=$class->getmethod('ec'); //获取fuc 类中的ec方法
  $fuc=$class->newInstance(); //实例化
  $ec->invoke($fuc);   //执行ec 方法
  上面的过程很熟悉吧,其实和调用对象的方法类似
 
  只不过这里是反着来的,方法在前,对象在后

(编辑:菏泽站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读