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

PHP
PHP5中PDO的简单使用
更好的构造开发模板 五种PHP设计模式
PHP和AJAX打造高级RSS聚合器
跟我来学PHP5:session会话的使用和分析
构建可配置PHP应用程序的正确方式
在PHP中全面阻止SQL注入式攻击之一
在PHP中全面阻止SQL注入式攻击之二
在PHP中全面阻止SQL注入式攻击之三
7种流行PHP集成开发工具(IDE)的比较
PHP中的XML应用
PHP会话——session 时间设定使用入门
PHP对GB编码动态转UTF-8几种方法评测
确保PHP安全,不能违反的四条安全规则
如何利用PHP会话显示出当前在线的用户
PHP开发实例:创建PDF中文文档的程序代码
动态网页技术PHP的数组处理函数库
一贴学会PHP 为落伍的MJJ们量身定做的教程
PHP生成RSS类 (PHP类)
基于PHP和AJAX创建RSS聚合器 (1)
PHP实例——PHP创建动态图像

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


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

?>