php反射类ReflectionClass用法分析


Posted in PHP onMay 12, 2016

本文实例讲述了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 方法

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

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

PHP 相关文章推荐
PHP文件上传实例详解!!!
Jan 02 PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
PHP查询网站的PR值
Oct 30 PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 PHP
标准PHP的AES加密算法类
Mar 12 PHP
WordPress中查询文章的循环Loop结构及用法分析
Dec 17 PHP
使用php+swoole对client数据实时更新(一)
Jan 07 PHP
php 生成Tab键或逗号分隔的CSV
Sep 24 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
PHP 的比较运算与逻辑运算详解
May 12 #PHP
php使用文本统计访问量的方法
May 12 #PHP
php格式化json函数示例代码
May 12 #PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 #PHP
yii2带搜索功能的下拉框实例详解
May 12 #PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
May 11 #PHP
PHP数据库操作Helper类完整实例
May 11 #PHP
You might like
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
Php中使用Select 查询语句的实例
2014/02/19 PHP
php获取文件大小的方法
2014/02/26 PHP
php中动态修改ini配置
2014/10/14 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
python logging重复记录日志问题的解决方法
2018/07/12 Python
python单例模式获取IP代理的方法详解
2018/09/13 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
python面试题之列表声明实例分析
2019/07/08 Python
微信公众号token验证失败解决方案
2019/07/22 Python
python3字符串操作总结
2019/07/24 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
超市业务员岗位职责
2013/12/05 职场文书
股份转让协议书
2014/04/12 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
行政监察建议书
2014/05/19 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书