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

 更新时间:2008年10月22日 21:53:57   作者:  
通过代理类ClassOneDelegator来代替ClassOne类来实现他的方法。
演示用代码如下所示: 
复制代码 代码如下:

<?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日期转时间戳,指定日期转换成时间戳

    UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以有的时候需要互相转换,下面给出PHP日期转时间戳、MySQL日期转换函数互相转换的几种转换方式
    2012-07-07
  • php XPath对XML文件查找及修改实现代码

    php XPath对XML文件查找及修改实现代码

    php XPath对XML文件查找及修改实现代码,需要的朋友可以参考下。
    2011-07-07
  • 解决phpmyadmin中文乱码问题。。。

    解决phpmyadmin中文乱码问题。。。

    解决phpmyadmin中文乱码问题。。。...
    2007-01-01
  • php扩展Zend Framework框架——Validate扩展

    php扩展Zend Framework框架——Validate扩展

    这篇文章介绍了php扩展Zend Framework框架,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2008-01-01
  • php数组转成json格式的方法

    php数组转成json格式的方法

    这篇文章主要介绍了php数组转成json格式的方法,实例分析了php操作数组及json格式数据的方法,需要的朋友可以参考下
    2015-03-03
  • 用php获取远程图片并把它保存到本地的代码

    用php获取远程图片并把它保存到本地的代码

    Function: 获取远程图片并把它保存到本地 确定您有把文件写入本地服务器的权限变量说明: $url 是远程图片的完整URL地址,不能为空。 $filename 是可选变量: 如果为空,本地文件名将基于时间和日期 自动生成.
    2008-04-04
  • PHP封装cURL工具类与应用示例

    PHP封装cURL工具类与应用示例

    这篇文章主要介绍了PHP封装cURL工具类与应用,结合实例形式分析了php基于面向对象封装的curl请求、响应、参数设置等相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • 让PHP支持页面回退的两种方法[转]

    让PHP支持页面回退的两种方法[转]

    让PHP支持页面回退的两种方法[转]...
    2007-02-02
  • PHP创建XML接口示例

    PHP创建XML接口示例

    这篇文章主要介绍了PHP创建XML接口,结合实例形式分析了php数据库查询及xml格式数据构造相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • JavaScript实现滚动栏效果的方法

    JavaScript实现滚动栏效果的方法

    这篇文章主要介绍了JavaScript实现滚动栏效果的方法,涉及javascript操作html元素实现滚动的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04

最新评论