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

PHP
PHP 5.0对象模型深度探索之绑定
PHP在XP下IIS和Apache2服务器上的安装
PHP环境搭建最新方法
详细介绍:Apache+PHP+MySQL配置攻略
教你IIS6的PHP最佳配置方法
WINDOWS 2000下使用ISAPI方式安装PHP
JAVA/JSP学习系列之五
JAVA/JSP学习系列之一
PHP5试用(二)
BS结构中使用PHP访问ORACLE LOB
php分别做为cgi和module来运行的配置
PHP SOCKET 技术研究
PHP 5 数据对象 (PDO) 抽象层与 Oracle
PHP生成静态页面详解
利用php和js实现页面数据刷新
php中检查email完整性
用PHP实现XML备份Mysql数据库
用PHP和MYSQL建立计数器过程详解
简单设置IIS配置PHP调试环境
PHP 脚本:随心所欲的代码逐渐流行

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 110 ::
收藏到网摘: 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();

?>