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编实现程动态图像的创建代码
Sep 28 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
php获取文件内容最后一行示例
Jan 09 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
php Session无效分析资料整理
Nov 29 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 PHP
laravel配置Redis多个库的实现方法
Apr 10 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 PHP
thinkphp框架类库扩展操作示例
Nov 26 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
PHP概率计算函数汇总
2015/09/13 PHP
thinkPHP查询方式小结
2016/01/09 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
python简单分割文件的方法
2015/07/30 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
Python查询IP地址归属完整代码
2017/06/21 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
Python双向循环链表实现方法分析
2018/07/30 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
python 常见的反爬虫策略
2020/09/27 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
采购助理岗位职责
2014/02/16 职场文书
食品安全承诺书
2014/05/22 职场文书
校园绿化美化方案
2014/06/08 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书