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 和 HTML
Oct 09 PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
深入解析phpCB批量转换的代码示例
Jun 27 PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 PHP
php中return的用法实例分析
Feb 28 PHP
PHP SPL标准库中的常用函数介绍
May 11 PHP
php实现zip文件解压操作
Nov 03 PHP
php时间函数用法分析
May 28 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
Yii全局函数用法示例
Jan 22 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 PHP
PHP isset empty函数相关面试题及解析
Dec 11 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插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
php遍历目录方法小结
2015/03/10 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
Python实现堆排序的方法详解
2016/05/03 Python
简单了解python模块概念
2018/01/11 Python
tornado 多进程模式解析
2018/01/15 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
德国童装购物网站:NICKI´S.com
2018/04/20 全球购物
学校安全责任书范本
2014/07/23 职场文书
升国旗演讲稿
2014/09/05 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
AJAX学习笔记
2021/05/18 Javascript
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android
python开发制作好看的时钟效果
2022/05/02 Python