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实例。
当你在其他的对象或者这个对象内置的构造函数(__construct)里面使用$this这个变量时,这个问题会变的更加的复杂。
结果是在PHP4中,你几乎总需要:
创建一个引用对象,就象这样$obj=?& new class; 在函数中调用引用对象,比如function func(?&$obj_param){} 通过引用函数来捕捉对象,比如function? &some_func(){} $return_obj=&some_funct()事实上,现在有些情况下你也需要复制原始对象。在我的PHP4代码里面,我总是把任何无引用的对象任务比如为一个明显的对象复制注释的很清楚。从长期来说,这样的一个简短的注释能够极大的减轻任何一个维护你代码的人的头痛(译者注:这样的代码可维护性很强)。引用传值,对象柄和对象复制的相关知识将在第二章对象模式的价值里面详细讲解。
尽管我个人很偏向于使用PHP5开发,但我感觉到PHP4将继续被我们使用相当长的一段时间,而且现有的公开发布的项目也将继续支持PHP4。所以,本书对两种版本的PHP提供相同的支持。尽可能的提供了PHP4,PHP5两个版本的实例代码。在每一章里面,每一个代码块(在不同的PHP版本中有所改动的)中都提供有相应的注释来暗示其改变,比如//php4和//php5。
[next]
参考书目和其他资源
这里有很多相关的参考书来帮助你更好的学习设计模式。设计模式的圣经(译者译:最好的书)是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。
(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/php/)感谢
我很感谢我得老板,在他那里,我的任务和责任允许我在这个我感兴趣的领域花费一部分时间,也感谢他给我提供知识和经验让我有信心写完这本书。
我的灵感,想法和经验的另外一个来源是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和公司主办的会议也是相当好的。
(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/php/)下一节:《PHP设计模式介绍》第一章 编程惯用法