PHP反射机制用法实例


Posted in PHP onAugust 28, 2014

本文实例讲述了PHP反射机制的用法,分享给大家供大家参考之用。具体方法如下:

演示示例代码如下所示:

<?php
class ClassOne {
  function callClassOne() {
    print "In Class One";
  }
}
class ClassOneDelegator {
  private $targets;
  function __construct() {
    $this->target[] = new ClassOne();
  }
  function __call($name, $args) {
    foreach ($this->target as $obj) {
      $r = new ReflectionClass($obj);
      if ($method = $r->getMethod($name)) {
        if ($method->isPublic() && !$method->isAbstract()) {
          return $method->invoke($obj, $args);
        }
      }
    }
  }
}
$obj = new ClassOneDelegator();
$obj->callClassOne();
?>

输出结果:

In Class One

可见,通过代理类ClassOneDelegator来代替ClassOne类来实现他的方法。

同样的,如下的代码也是能够运行的:

<?php
class ClassOne {
  function callClassOne() {
    print "In Class One";
  }
}
class ClassOneDelegator {
  private $targets;
  function addObject($obj) {
    $this->target[] = $obj;
  }
  function __call($name, $args) {
    foreach ($this->target as $obj) {
      $r = new ReflectionClass($obj);
      if ($method = $r->getMethod($name)) {
        if ($method->isPublic() && !$method->isAbstract()) {
          return $method->invoke($obj, $args);
        }
      }
    }
  }
}
$obj = new ClassOneDelegator();
$obj->addObject(new ClassOne());
$obj->callClassOne();
?>

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
以文本方式上传二进制文件的PHP程序
Oct 09 PHP
phpwind中的数据库操作类
Jan 02 PHP
php入门学习知识点六 PHP文件的读写操作代码
Jul 14 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
Mar 05 PHP
PHP flush()与ob_flush()的区别详解
Jun 03 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
php查询mysql大量数据造成内存不足的解决方法
Mar 04 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 #PHP
PHP对象递归引用造成内存泄漏分析
Aug 28 #PHP
PHP中cookie和session的区别实例分析
Aug 28 #PHP
PHP实现视频文件上传完整实例
Aug 28 #PHP
PHP获取表单所有复选框的值的方法
Aug 28 #PHP
PHP中echo和print的区别
Aug 28 #PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
Aug 28 #PHP
You might like
PHP实现货币换算的方法
2014/11/29 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
微信小程序录音与播放录音功能
2017/12/25 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
2020/05/20 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
Python+django实现简单的文件上传
2016/08/17 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
Python 支付整合开发包的实现
2019/01/23 Python
Python发展史及网络爬虫
2019/06/19 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
通过Python实现一个简单的html页面
2020/05/16 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
行政助理工作职责范本
2014/03/04 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
会议通知
2015/04/15 职场文书