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

PHP
动易数据转成dedecms的php程序
PHP中文汉字验证码
收藏的一个php小偷的核心程序
ASP和PHP都是可以删除自身的
PHP+Tidy-完美的XHTML纠错+过滤
PHP实现MVC开发得最简单的方法——模型
相对路径转化成绝对路径
如何提高MYSQL数据库的查询统计速度 select 索引应用
php下的转义字符串
PHP 中英文混合排版中处理字符串常用的函数
Linux下ZendOptimizer的安装与配置方法
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
dede全站URL静态化改造[070414更正]
使用Xdebug调试和优化PHP程序之[1]
PHP与SQL注入攻击[一]
PHP与SQL注入攻击[二]
PHP与SQL注入攻击[三]
PHP和XSS跨站攻击的防范
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口

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


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

?>