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 相关文章推荐
建立文件交换功能的脚本(三)
Oct 09 PHP
杏林同学录(三)
Oct 09 PHP
《APMServ 5.1.2》使用图解
Oct 23 PHP
php防攻击代码升级版
Dec 29 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
Jun 05 PHP
一个PHP的远程图片抓取函数分享
Sep 25 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
Laravel中间件实现原理详解
Oct 09 PHP
php修改数组键名的方法示例
Apr 15 PHP
PHP 8新特性简介
Aug 18 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
第五节 克隆 [5]
2006/10/09 PHP
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
学习python的几条建议分享
2013/02/10 Python
python解析文件示例
2014/01/23 Python
Python中IPYTHON入门实例
2015/05/11 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
瑞典度假品牌:OAS
2019/05/28 全球购物
双方协议书
2014/04/22 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书