$fp = fopen;$data = fread($fp, filesize;fclose;return $data;}}

如果是Jasmin, 这个秘密当然不能让她知道.

新澳门31999 ,二、 概述在我们开始实现Dynamic Proxy之前,
也许我们应该先了解一下什么是Proxy和它有什么用.
下面是一篇来自博客堂加菲猫的不错的形象讲述Proxy的文章:
“武当学艺与缓存代理”. Proxy模式是”GoF”介绍的23个设计模式之一,
Proxy的目的是” Provide a surrogate or placeholder for another object to
control access to it(为其他对象提供一种代理以控制对这个对象的访问)”.
一般常见的代理模式有: 远程代理, 虚代理, 保护代理,
智能代理.但是使用代理有一个坏处就是你得手动创建所需要代理类的副本.
这意味着如果你为Image类创建一个Virtual Proxy,
那么你不得不手动创建一个与Image类有相同Method的ImageProxy类. Ok,
如果你和我一样懒, 你一定会想到动态来产生Proxy. 是的, 接下来你就会发现,
其实在PHP4中你很容易实现它.

五、 总结代理是一个非常有用的模式. PHP4虽然并不是真正的Object-Oriented,
但仍然可以实现你想实现的设计.
写本文的目的有很大部分是希望国内PHP开发者不要再拘泥于现在的开发现状,
开发出更好的PHP软件. 而不是一堆Script的堆积.

var $object;

结果如下:如果是Binzy, 那么自然可以知道那个秘密.

OK, 我们现在要加入验证用户的功能, 即为ReadFileClass中的方法加入保护控制.
如果采用手动创建代理, 那么你可以继承ReadFileClass或者实现IReadFileClass,
并加入保护代码(其实在PHP4中甚为自由, 因为除了基本类型外都是object-_-).
不过我们现在试试用刚才实现的动态代理来创建Proxy.

请看清单三的ReadFileClassProxy的代码,
注意该类继承自ProxyInvocationHandler类.

$proxy = ReadFileClassProxy::NewInstance;print $proxy->ReadMyFile();

function ReadFileClassProxy{$this->object = &$obj;}

Auth类是一个进行权限验证的类, 此处我们只是简单的查看传入的UserName,
如果是Binzy, 那么自然是可以看秘密的J, 如果是Jasmin, 那么HoHo, 没得看,
给Binzy点空间嘛.:D 详见清单四.

// $proxy is not used here, but it is useful.function Invoke(&$proxy,
$method, $parameters){$uname = ‘Binzy’;//$uname = ‘Jasmin’;if
(Auth::CheckAuth{Return parent::Invoke(&$proxy, $method,
$parameters);}else{//return ‘No Permission!’;}}}

清单二class ReadFileClass extends IReadFileClass {function ReadMyFile(){

作者:Binzy 来源:超越PHP

//function NewInstance{$proxyFactory = ProxyFactoryInstance();return
$proxyFactory->create(new ReadFileClassProxy,get_parent_class;}

Ok, 下面我们来使用我们创建的代理. 请见清单五.

清单三
require_once;require_once(‘ProxyInvocationHandler.php’);require_once;

一、 摘要本文简单阐述了Proxy模式及具体说明了如何在PHP4中实现动态代理,
本文只是给出了一个实现的方法的原型. 由于水平有限,
有任何意见和建议请反馈给Binzy [ Binzy at JustDN dot Com ].

三、 实现由于PHP4是解释型语言, 弱类型, 且无接口.
所以在实现的时候既有方便之处又有不妥之处. 此处不拘泥于实现方法,
本文也只是实现方法之一.本文实现的策略其实非常简单.
核心即ProxyFactory类及Clazz类, ProxyFactory负责实例化Clazz, 并赋值.
而由Clazz类负责创建并返回Proxy.
创建Proxy是以写入临时文件方式进行的.具体请查看ProxyFactory.php和Clazz.php二个文件中的代码.
此处不再赘述.另外在ProxyInvocationHandler.php中我们定义了一个ProxyInvocationHandler类.

四、 示例我们现在有一个ReadFileClass类, 该类继承自IReadFileClass,
由于PHP4没有接口, 所以此处接口算是模拟的,
事实上在PHP4中不使用实现接口也是可行的J.
二个类的具体内容请见清单一和清单二.

清单一class IReadFileClass{function ReadMyFile() {}}

PHP4中实现动态代理_php基础_脚本之家。清单五 require_once;require_once(‘ReadFileClassProxy.php’);

class ReadFileClassProxy extends ProxyInvocationHandler{

清单四 class Auth{function Auth(){}// bool// function CheckAuth{if
{return true;}return false;}}

发表评论

电子邮件地址不会被公开。 必填项已用*标注