当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP 反射机制实现动态代理的代码

PHP
php REMOTE_ADDR之获取访客IP的代码
编写漂亮的代码 - 将后台程序与前端程序分开
懒惰是金 介绍几个php通用的函数
追求程序速度,而不是编程的速度
使用PHP的日期与时间函数技巧
php格式化工具Beautify PHP小小BUG
php实现的简单压缩英文字符串的代码
php5数字型字符串加解密代码
awk简介与学习笔记收集
PHP开发框架总结收藏
Ajax PHP简单入门教程代码
php中文字母数字验证码实现代码
php SQL防注入代码
php xfocus防注入资料
用php+javascript实现二级级联菜单的制作
php adodb连接带密码access数据库实例,测试成功
删除及到期域名的查看(抢域名必备哦)
开源SNS系统-ThinkSNS
php循环输出数据库内容的代码
php读取数据库信息的几种方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 258 ::
收藏到网摘: n/a

演示用代码如下所示:

以下为引用的内容:

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类来实现他的方法。

同样的,如下的代码也是能够运行的:

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();

?>