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 相关文章推荐
mysql中存储过程、函数的一些问题
Feb 14 PHP
PHP中的session永不过期的解决思路及实现方法分享
Apr 20 PHP
php设计模式 Adapter(适配器模式)
Jun 26 PHP
处理单名多值表单的详解
Jun 08 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
深入理解PHP变量的值类型和引用类型
Oct 21 PHP
PHP strip_tags保留多个HTML标签的方法
May 22 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 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
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
浅谈php提交form表单
2015/07/01 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
浅谈Python的异常处理
2016/06/19 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
精灵市场:Pixie Market
2019/06/18 全球购物
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
邮政营业员岗位职责
2015/04/14 职场文书
涨价通知怎么写
2015/04/23 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技