澳门新葡亰娱乐官网PHP4中实现动态代理

作者:Binzy 来源:超越PHP

一、 摘要本文简单门船演讲了Proxy形式及具体表达了什么样在PHP4中贯彻动态代理,
本文只是给出了三个兑现的艺术的原型. 由于水平有限,
有其余理念和建议请报告给Binzy [ Binzy at JustDN dot Com ].

二、 概述在大家初阶落到实处Dynamic Proxy早前,
可能大家理应先通晓一下怎样是Proxy和它有哪些用.
上边是一篇来自博客堂加菲猫的不利的影象叙述Proxy的稿子:
“武当学艺与缓存代理”. Proxy方式是”GoF”介绍的二十三个设计情势之一,
Proxy的目标是” Provide a surrogate or placeholder for another object to
control access to it(为其余对象提供一种代理以调整对这几个目的的会见卡塔尔国”.
寻平日见的代办方式有: 远程代理(Remote Proxy卡塔尔国, 虚代理(Virtual Proxy卡塔尔,
爱慕代理(Protection Proxy卡塔尔(قطر‎, 智能代理(SmartProxyState of Qatar.但是运用代理有三个害处正是您得手动创制所需求代理类的别本(即代理类卡塔尔(قطر‎.
那意味着一旦您为Image类创造一个Virtual Proxy,
那么你只可以手动创设一个与Image类有相通Method的ImageProxy类. Ok,
假如你和自家同样懒, 你一定会想到动态来产生Proxy. 是的, 接下来你就能开采,
其实在PHP4中你超级轻便完成它.

三、 落成由于PHP4是解释型语言, 弱类型, 且无接口.
所以在落到实处的时候既有方便之处又有不妥之处. 此处不拘泥于完成情势,
本文也只是完成方式之一.本文落成的布置其实十三分轻松.
大旨即ProxyFactory类及Clazz类, ProxyFactory肩负实例化Clazz, 并赋值.
而由Clazz类担任创设并重临Proxy.
创制Proxy是以写入有的时候文件方式开展的.具体请查看ProxyFactory.php和Clazz.php三个公文中的代码.
此处不再赘述.此外在ProxyInvocationHandler.php中我们定义了叁个ProxyInvocationHandler类.

四、 示例大家以往有一个ReadFileClass类, 该类世袭自IReadFileClass,
由于PHP4未有接口, 所以此处接口算是模拟的,
事实上在PHP4中不选用达成接口也是立竿见影的J.
三个类的具体内容请见项目清单一和清单二.

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

澳门新葡亰娱乐官网,清单二class ReadFileClass extends IReadFileClass {function ReadMyFile(){

$fp = fopen(‘test.txt’, “r”);$data = fread($fp,
filesize(‘test.txt’));fclose($fp);return $data;}}

OK, 我们今后要投入验证顾客的功用, 即为ReadFileClass中的方法插手体贴调控.
假若利用手动成立代理, 那么您能够继续ReadFileClass只怕达成IReadFileClass,
并加入爱戴代码(其实在PHP4中十三分自由, 因为除却大旨项目外都以object-_-卡塔尔.
然而我们今后尝试用刚刚达成的动态代理来成立Proxy.

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

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

class ReadFileClassProxy extends ProxyInvocationHandler{

var $object;

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

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

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

Auth类是二个进展权力验证的类, 此处大家只是简短的查阅传入的UserName,
若是是Binzy, 那么自然是足以看秘密的J, 要是是Jasmin, 那么HoHo, 没得看,
给Binzy点空间嘛.:D 详见清单四.

清单四 class Auth{function Auth(){}// bool// function
CheckAuth($username){if ($username == ‘Binzy’){return true;}return
false;}}

Ok, 上面大家来使用大家创立的代理. 请见清单五.

清单五
require_once(‘ReadFileClass.php’);require_once(‘ReadFileClassProxy.php’);

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

结果如下:固然是Binzy, 那么自然能够领略那多少个秘密.

假如是Jasmin, 那些秘密当然不能够让她知道.

五、 总括代理是多少个十分实用的格局. PHP4即便并不是真正的Object-Oriented,
但依旧能够兑现您想落成的设计.
写本文的目标有非常大多数是梦想国内PHP开辟者不要再拘泥于现在的支现身状,
开辟出越来越好的PHP软件. 实际不是一群Script的积聚.

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图