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 相关文章推荐
mysql5详细安装教程
Jan 15 PHP
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
php下连接mssql2005的代码
Jan 17 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
解析php中const与define的应用区别
Jun 18 PHP
php共享内存段示例分享
Jan 20 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
Apr 08 PHP
理解php依赖注入和控制反转
May 11 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 PHP
php数组指针函数功能及用法示例
Feb 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自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
JavaScript模块详解
2017/12/18 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
Python FTP操作类代码分享
2014/05/13 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
wxpython绘制音频效果
2019/11/18 Python
Python函数式编程实例详解
2020/01/17 Python
解决python 找不到module的问题
2020/02/12 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
一套带网友答案的.NET笔试题
2016/12/06 面试题
十佳教师事迹材料
2014/01/11 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
大学迎新标语
2014/06/26 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
新手入门Mysql--概念
2021/06/18 MySQL