仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4305|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页设计PHP4中完成静态代办署理

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
#
发表于 2015-2-16 00:29:38 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
左手拿着MOTOLOLA右手拿着NOKIA,要多潇洒,有多潇洒,哈哈,终于学会了,但是可能这个时候,又会有人不经意的拍拍肩膀对你说:哥们,别高兴的太早,你还是菜鸟,离学会还差着一大截呢!静态   1、 摘要
本文复杂论述了Proxy形式及详细申明了若何在PHP4中完成静态代办署理, 本文只是给出了一个完成的办法的原型. 因为程度无限, 有任何定见和建议请反应给Binzy [ Binzy at JustDN dot Com ].

2、 概述
在咱们入手下手完成Dynamic Proxy之前, 或许咱们应当先懂得一下甚么是Proxy和它有甚么用. 上面是一篇来自博客厅加菲猫的不错的抽象讲述Proxy的文章: “武当学艺与缓存代办署理”. Proxy形式是”GoF”引见的23个设计形式之一, Proxy的目标是” Provide a surrogate or placeholder for another object to control access to it(为其他对象供应一种代办署理以掌握对这个对象的会见)”. 普通罕见的代办署理形式有: 近程代办署理(Remote Proxy), 虚代办署理(Virtual Proxy), 回护代办署理(Protection Proxy), 智能代办署理(Smart Proxy).
然而利用代办署理有一个害处就是你到手动创立所需求代办署理类的正本(即代办署理类). 这意味着假如你为Image类创立一个Virtual Proxy, 那末你不能不手动创立一个与Image类有不异Method的ImageProxy类. Ok, 假如你和我一样懒, 你必定会想到静态来发生Proxy. 是的, 接上去你就会发明, 其其实PHP4中你很轻易完成它.

3、 完成
因为PHP4是注释型言语, 弱类型, 且无接口. 所以在完成的时分既无方便的地方又有不当的地方. 此处不拘泥于完成办法, 本文也只是完成办法之一.
本文完成的战略其实十分复杂. 中心即ProxyFactory类及Clazz类, ProxyFactory担任实例化Clazz, 并赋值. 而由Clazz类担任创立并前往Proxy. 创立Proxy是以写入一时文件体例停止的.
详细请检查ProxyFactory.php和Clazz.php二个文件中的代码. 此处不再赘述.
别的在ProxyInvocationHandler.php中咱们界说了一个ProxyInvocationHandler类.

4、 示例
咱们如今有一个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, 这个奥密固然不克不及让她晓得.



5、 总结
代办署理是一个十分有效的形式. PHP4固然并非真实的Object-Oriented, 但依然可以完成你想完成的设计. 写本文的目标有很大局部是但愿国际PHP开辟者不要再拘泥于如今的开辟近况, 开辟出更好的PHP软件. 而不是一堆Script的聚积.

6、 感激
感激密友 Freeman 为我做测试.
感激 mmkk 的Code Formatter HTC.

7、 参考
1. GoF
2. GoF中译本
3. PHP参考手册 http://www.php.net/manual/en/

8、 相干下载
相干附件:本文原代码

  理解动态语言的概念,运做机制,熟悉PHP语法
愤怒的大鸟 该用户已被删除
19#
发表于 2015-10-5 00:05:57 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
小女巫 该用户已被删除
18#
发表于 2015-7-28 09:13:15 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
17#
发表于 2015-7-12 04:14:24 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
不帅 该用户已被删除
16#
发表于 2015-6-26 13:25:40 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
小魔女 该用户已被删除
15#
发表于 2015-5-3 21:54:56 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
冷月葬花魂 该用户已被删除
14#
发表于 2015-5-1 07:07:59 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
乐观 该用户已被删除
13#
 楼主| 发表于 2015-4-28 16:21:31 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
飘灵儿 该用户已被删除
12#
发表于 2015-4-3 23:35:21 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
老尸 该用户已被删除
11#
发表于 2015-3-31 19:25:07 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
山那边是海 该用户已被删除
10#
发表于 2015-3-24 10:51:14 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
透明 该用户已被删除
9#
发表于 2015-3-24 01:36:09 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
精灵巫婆 该用户已被删除
8#
发表于 2015-3-22 19:10:59 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
若天明 该用户已被删除
7#
发表于 2015-3-21 10:10:39 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
灵魂腐蚀 该用户已被删除
6#
发表于 2015-3-17 18:10:54 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
兰色精灵 该用户已被删除
5#
发表于 2015-3-11 11:23:41 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
莫相离 该用户已被删除
地板
发表于 2015-3-3 14:54:00 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
金色的骷髅 该用户已被删除
板凳
发表于 2015-3-1 22:00:26 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
变相怪杰 该用户已被删除
沙发
发表于 2015-2-24 21:01:22 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
admin 该用户已被删除
楼主
发表于 2015-2-16 04:58:42 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 20:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表