PHP 反射机制实现动态代理的代码


Posted in PHP onOctober 22, 2008

演示用代码如下所示: 

<?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 url 加密解密函数代码
Aug 26 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
zf框架db类的分页示例分享
Mar 14 PHP
PHP6 中可能会出现的新特性预览
Apr 04 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 PHP
如何通过PHP实现Des加密算法代码实例
May 09 PHP
ThinkPHP5分页paginate代码实例解析
Nov 10 PHP
PHP中函数内引用全局变量的方法
Oct 20 #PHP
sqlyog 中文乱码问题的设置方法
Oct 19 #PHP
mysql5的sql文件导入到mysql4的方法
Oct 19 #PHP
php flush类输出缓冲剖析
Oct 19 #PHP
PHP5+UTF8多文件上传类
Oct 17 #PHP
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
Oct 13 #PHP
PHP中str_replace函数使用小结
Oct 11 #PHP
You might like
综合图片计数器
2006/10/09 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
Python线性方程组求解运算示例
2018/01/17 Python
python可视化实现代码
2019/01/15 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
最新大学生自我评价
2013/09/24 职场文书
大一自我鉴定范文
2013/10/04 职场文书
材料加工硕士生求职信
2013/10/10 职场文书
手机业务员岗位职责
2013/12/13 职场文书
毕业生的自我评价
2013/12/30 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
GPU服务器的多用户配置方法
2022/07/07 Servers