您的位置: 首页 > 技术文档 > 网络编程 > php设计模式介绍之导言
php设计模式介绍之值对象模式 回到列表 php设计模式介绍之编程惯用法
 php设计模式介绍之导言

作者: 时间: 2008-04-10 文档类型:翻译 来自:phpchina

第 1 页 php设计模式介绍之导言 [1]
第 2 页 php设计模式介绍之导言 [2]

PHP4和PHP5

当我写这本书的时候,PHP5已经发行有一段时间了,但是还没有被公众团体广泛的采用。在我自己的工作上,我已经开始把新的应用程序开发工作迁移到 PHP5.0.3的环境中,而且到目前为止我很高兴的发现PHP5对PHP4的代码具有很好的向后兼容性,同时它的面对对象模型是PHP5最有意义的新特 征之一。

有很多很好的文章和指导手册来处理不同PHP版本之间的对象模型之间的细微差别。但简单来说,PHP5提供了:

  1. 对象柄(将在下面解释,更详细的请见第二章:对象模型的价值)?
  2. 更好的构造器(统一名字,不允许改变)?
  3. 析构器?
  4. 可见度(方法和属性的public公开,protected受保护,private私有)?
  5. 异常处理(可以选择新的语法try{}catch{}来触发错误)?
  6. 静态类?
  7. 映像(动态检查类,方法,属性)?
  8. 类型隐藏?

 PHP5也提供了一些更加模糊的特征:

 新的魔术方法?

  1. __get()和__set()允许你来控制变量存取
  2. __call()让你能动态的截取被call对象的所有属性。
  3. __sleep()和__wakeup()能让你重载序列化的方法
  4. __toString()让你能控制如何用一个字符串来描述这个对象自身。
  5. 自动加载Autoloading(当类第一次被对象化时候,允许用户自动加载该类)?
  6. Final(不允许该方法或者一个类被其子类重载)?

对象柄

 PHP5最好的特性就是采用句柄来定义类,类似于一个文件或者数据库句柄。在PHP函数中使用对象不再是含蓄的复制这个对象,而是提供一个操作句柄。

为了更加清楚的看出其间的不同,我们考虑下面两个例子:

// PHP4 class
class ExampleP1 {
var $foo;
function setFoo($foo) {
$this->foo = $foo`;
}
function getFoo() {
return $this->foo;
}
}
function changeExample($param) {
$param->setFoo(‘blah’);
return $param->getFoo();
}
$obj = new ExampleP1;
$obj->setFoo(‘bar’);
echo $obj->getFoo(); // bar
echo ChangeExample($obj); //blah
echo $obj->getFoo(); // bar

在PHP4中,函数changeExample()中的变量$param是$obj的一个复制,所以,这个函数没有改变原来对象中的$foo的值,这样$obj->getFoo()最终输出的是’bar’。

在PHP5中,由于$obj在函数中只是一个对象操作柄,同样的changeExample()函数确确实实的影响了原来的对象。换句话说,使用操作柄,就不再需要去复制了而$param就是$obj实例。

// PHP5 class
class ExampleP2 {
protected $foo;
function setFoo($foo) {
$this->foo = $foo;
}
function getFoo() {
return $this->foo;
}
}
$obj = new ExampleP2;
$obj->setFoo(‘bar’);
echo $obj->getFoo(); // bar
echo ChangeExample($obj); //blah
echo $obj->getFoo(); // IMPORTANT, produces blah

当你在其他的对象或者这个对象内置的构造函数(__construct)里面使用$this这个变量时,这个问题会变的更加的复杂。

结果是在PHP4中,你几乎总需要:

  1. 创建一个引用对象,就象这样$obj=?& new class;
  2. 在函数中调用引用对象,比如function func(?&$obj_param){}
  3. 通过引用函数来捕捉对象,比如function? &some_func(){}  $return_obj=&some_funct()

事实上,现在有些情况下你也需要复制原始对象。在我的PHP4代码里面,我总是把任何无引用的对象任务比如为一个明显的对象复制注释的很清楚。从长 期来说,这样的一个简短的注释能够极大的减轻任何一个维护你代码的人的头痛(译者注:这样的代码可维护性很强)。引用传值,对象柄和对象复制的相关知识将 在第二章“对象模式的价值”里面详细讲解。

尽管我个人很偏向于使用PHP5开发,但我感觉到PHP4将继续被我们使用相当长的一段时间,而且现有的公开发布的项目也将继续支持PHP4。所以,本 书对两种版本的PHP提供相同的支持。尽可能的提供了PHP4,PHP5两个版本的实例代码。在每一章里面,每一个代码块(在不同的PHP版本中有所改动 的)中都提供有相应的注释来暗示其改变,比如//php4和//php5。

参考书目和其他资源

这里有很多相关的参考书来帮助你更好的学习设计模式。设计模式的“圣经”(译者译:最好的书)是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides(他的开创性作品经常被提及为“Gang of Four”简写为”GOF”,就是代表他们四个人)撰写的《设计模式:可重用的面对对象软件开发原理》。

 关于“设计模式”,下一个最有用的关于PHP WEB应用程序设计模式方面的书就是Martin Fowler出版的Patterns of Enterprise Application Architecture (译者译:企业应用程序体系结构模型)。与GOF的书包含了所有一般的设计模式相比,Fowler的这本书详细的介绍了许多专门用于开发web应用程序的 设计模式。

另外在很多网站上也提供了有关设计模式方面的丰富资源,一个特别典型的网站就是波特兰模型库(http://cz.com/por/)。

另外一个关于PHP设计模式的站点是phpPatterns,在线地址是http://www.phppatterns.com

感谢

我很感谢我得老板,在他那里,我的任务和责任允许我在这个我感兴趣的领域花费一部分时间,也感谢他给我提供知识和经验让我有信心写完这本书。

我的灵感,想法和经验的另外一个来源是SitePoint这个站点(http://www.sitepoint.com)的论坛。特别值得一提的,那些经 常上”Advanced PHP Forum”(译者译:PHP高级论坛)的投稿人都有着丰富的知识与经验,他们是我在网上发现的最慷慨大方的共享自己想法的团体。我也正是通过这些资源 (译者注:SitePoint站点)登陆了SimpleTest(http://simpletest.sf.net),WACT(http: //wact.sf.net)和其他许多我认为无价的PHP工程项目。在接下来的岁月里,我希望SitePoint能够继续成为PHP开发者的丰富资源 点。

没有PHP开发团队的贡献和重要的努力,这本书显然是不可能存在的。因为正是他们开发出如此好用、易学、通用而且非常适合开发WEB应用程序的语言。

最后,我还要感谢Marco Tabini 和php|architect的全体成员。这本杂志(译者注:php|architect)已经成为许多不同PHP主题的来源,而且这些主题都是专业的开发人员发布的。由Macro和公司主办的会议也是相当好的。

继续阅读:《PHP设计模式介绍》第一章 编程惯用法

本文链接:http://www.blueidea.com/tech/program/2008/5659.asp 

出处:phpchina
责任编辑:bluehearts

上一页 php设计模式介绍之导言 [1] 下一页

◎进入论坛网络编程版块参加讨论

相关文章 更多相关链接
php设计模式介绍之值对象模式
php设计模式介绍之编程惯用法
[php]实现页面GZIP压缩输出
[AS3]观察者模式(基本版)
PHP Token(令牌)设计
作者文章 更多作者文章
图标设计常犯的10种错误
圣诞节彩灯摄影作品
新浪博客、圈子模版设计大赛
方正推出徐静蕾字体
CrossOver 参展作品选
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:2/21个记录/页 转到 页 共2个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2