作者:empty 页数:401 出版社:empty |
译者序译者从接触PHP开发到现在接近十年, 参加了不少大型互联网应用的开发。在此过程中, 有中国互联网发展如日中天,全国互联网用户数量增长很快(已达3.5亿人)。当前较为流行的站点往往每天要面对至少上百万的访问者,而且需要提供越来越复杂的服务。几个问题是译者一直在关注的。作为研发者的我们,应该如何设计站点,让站点能满足当前阶段的业务需求(访问量和服务),并且保证网站有良好的架构设计,方便未来的后续开发和维护?我们应该如何解决代码的 耦合”问题,如何编写出易重用的代码,甚至达到理想化的软件层面的“美学 境界(可能是程序员的终极目标)?如何建立一套行之有效的团队协作机制,使研发团队日常的开发标准化,提高团队沟通和合作的效率。是否有一些放之四海而皆准的准则或通用的工具可以利用?正所谓“水涨船高”, PHP这种为互联网而生的编程语言这些年来也一直在进步。如何充分利用PHP中的新特性, 使日常的开发更为高效?读者可以从本书中找到上述问题的部分答案。因为本书不仅仅是一本PHP图书, 更是一本鼓励和促进读者超越代码层次,对整个站点的“设计”进行思考的书。条条大路通罗马,要设计出漂亮又实用的站点架构,每个人也许都有自己的体会和经验。但就PHP站点而言, 从根本上不外乎“面向过程”和“面向对象”两种比较底层的开发思路。面向过程的开发方式,每个人或每个团队都有自己的开发习惯,不太容易形成系统。所以这么多年来,虽然有不少优秀的面向过程的PHP程序面世, 但没能形成任何可供共享的“框架”或“思想 .而面向对象的开发方式,则积累了大量公认的模式和框架。从这个角度来说,建议读者朋友多花时间在面向对象设计上, 本书就“面向对象”在PHP中的实现做了非常深入的介绍, 涵盖了基础、高级知识以及设计模式的实现。从学习角度来说, 译者推荐PHP程序员沿这样的学习路线前进:PHP基础入门(语法、常用函数和扩展等) 一面向对象的PHP(本书就是很好的学习资料) →网站软件架构设计(设计模式、框架等)一网站物理层次架构设计(分布式计算、存储、负载均衡、高可用性等)。在现实当中,上述这些阶段和工作其实是交织在一起的。另外,程序设计之外的很多工具和实践经验,也极其重要,因为个人的能力有限,个人的价值必须在团队和企业当中得到体现。本书介绍的很多工具(如版本控制工具、文档工具和应用构建工具等)都可以促进团队协作。最后, 真诚邀请读者朋友通过本书来探索PHP。不论你是刚入门的PHP开发人员, 还是有多
译者序年经验的同行,相信看完本书之后,你都会有收获。当然,一个真正的程序员,他的思想水远是超越具体语言和工具的。期待有一天,读者朋友可以在了解书中这些知识的基础上,总结出属于自己的更加优秀的开发框架甚至是设计思想,开发出在互联网上受到用户欢迎的优秀站点。本书在PHP Eye开源社区设有读者反馈版块, 网址为http//bbs.phpeye.com/forum-16-1.html.译者将通过这个版块为读者提供勘误和答疑。陈浩(Hao happy)
致谢如果你突然想写一本书(就像我在布莱顿一家咖啡厅喝咖啡时突然有了这个念头),可能你只想到了该写什么主题,那一刹那的冲动很容易让你忘记写书是多么不容易。我很快就重新认识到写书是非常辛苦的工作,并且不是光靠一个人单打独斗就可以完成的。在编写本书的过程中,我得到了很多帮助。实际上,我的致谢首先要追溯到还没有本书构想的阶段。本书的萌芽来自于我在布莱顿为某个技术组织作的一次报告。该组织名为Skills wap(http://www.skillswap.org) , 由Andy Budd管理。正是由于Andy邀请我作报告, 我才开始总结PHP面向对象的相关思想。在此特别感谢Andy, 我该请他喝上一杯。我与A press出版社的Martin Streicher编辑建立了联系, 而后者则正式邀请我为A press写一本书。谢谢Jessey和Martin, 让本书的出版迈出了第一步。(我自己都觉得过分) , 我特别感谢Jason Gilmore在本书先后两个版本的出版过程中对我的热情帮很偶然地, 我在那次会议上遇到了A press出版社的一位作者Jessey White-C in is, 是她牵线让A press出版社的团队为我提供了很多帮助, 即使我因为工作和家庭原因一次次地拖延交稿助、Richard Dal Porto耐心的项目管理, 还有Heather Lang和Benjamin Berg忍受我总也搞不明白哪些词应该用代码体, 同时也非常感谢责任编辑Tom Welsh在本书编写过程中很有见地的指导, 他使我学会站在读者的角度来思考问题。在忙于写代码和文字的时候,很容易一叶障目,不见泰山,迷失对于全书总体思路的把握。我的朋友To an Blundell, 也是本书的技术审校, 一直提醒我按着全书的计划一步步前进, 感谢To lan.谢谢Steven Mets ker, 他允许我将他在Building Parsers in Java一书中的解析器API代码改写成简化的PHP版本放入本书。特别谢谢我在Yahoo!的上司Fergus Sullivan, 他允许我临时请假去写那些比较有难度的章节。当然, 我也要感谢Yahoo!对作者比较宽松的政策, 否则这样的请假是不可能被允许的。写书期间, 没有太多时间照顾家庭。在此谢谢我的妻子Louise以及我们的孩子Holly和Jake。我一直都很想念你们。自从本书第1版发行后,我收到了很多热情洋溢和富有建设性的读者回馈。我非常抱歉没能够一一回复,希望在此对你们一并表达我的谢意。你们的鼓励和支持是我写作第2版的动力。
第2版简介从2000年起我就开始使用PHP开发面向对象项目, 当然, 那时的PHP主要指PHP 4, 而PHP 4对于面向对象的支持比较有限。即使如此, 我发现PHP 4几乎可以满足我在面向对象开发上的所有需求,只要足够细心并遵守规范。2003年初, 我开始规划一本关于PHP 4与面向对象开发的书。这本书将用相当一部分篇幅阐述一些必需的策略、规范和变通方案, 使PHP适用于面向对象开发。但这时我听说PHP 5马上就要面世,而且面世的时间将在我开始动笔写书之前。于是我放弃了那本书的写作计划,开始构思另一本书。让我苦恼的很多问题, 现在都由于Zend Engine 2对面向对象的增强支持而化解于无形。我开始再我在最新版本的PHP环境(包括PHP 6) 下对本书中的所有代码进行了更新和测试。同时,我开始研究PHP 5新特性的细节, 并因此得到了很多启发, 过去用PHP 4进行面向对象开发时次为写书做笔记,但这次的内容不是如何克服语言的缺陷,而是如何利用语言的新特性。我写的书正是你手中的这本书,我尝试把读者想象成我第一次使用“对象”来开发较大项目时的样子。本书要求读者对PHP有一些基本的了解, 他们要么了解PHP, 要么有能力通过阅读自行掌握PHP的语法特性或功能。当然, 面向对象的很多细节对于PHP来说是很新鲜的, 我会在本书中完整地介绍。我以前缺乏的是如何找对感觉去有效使用对象,还有依据什么理由在开发中作出各种选择,同时我也很想知道部署代码的最佳实践,即使用什么工具和原则来测试代码、为代码生成文档和安装代码。这些都是本书试图阐述的,写这样一本书很有挑战性,我希望你们能有所收获。PHP 5已经发布3年了(恰好本书第1版也是3年前出版的) , 在这3年中, 面向对象的PHP开发逐渐成为了主流。PHP语言越来越成熟和稳定。同时, PHP相关的测试和集成开发工具也有了明显的进步。在这3年中,我很高兴收到不少读者来信,他们告诉我本书很有用。有的读者赞叹说本书将混乱的对象、模式、类和组件整理得井井有条,使整个系统变得优雅。我非常高兴,因为这正是我写本书所追求的效果。大部分计算机图书的生命是很短暂的。即使它们描述的核心概念会持续存在,一旦书上的示例代码不再适用,这些书的作用就会大受影响。这正是我编写本书第2版的原因。我也介绍了更多模式, 修改了与集成工具相关的很多章节。另外, 还新增了PH PUnt测试这一章,我希望第2版能够继续帮助PHP程序员使用对象和模式取得不同凡响的成果。Matt Zandstra
3.5继承
3.6小结----.
第4章
第一部分介绍
第二部分对象
第三部分模式
第1章PHP:设计与管理
1.1问题
1.2PHP和其他语言.
1.3关于本书.
3.5.1继承问题.-.
3.5.2使用继承.28
3.5.3pub1ic, private、protected;
高级特性-36
5.1.1PHP和命名空间.60
5.1.2包含路径.62
5.1.3自动加载-.----.-63
5.2.1查找英.--64
5.2.2了解对象或英.65
5.2.3了解类中的方法.-66
5.2.4了解类属性-67
5.2.5了解继承.67
7.4.1一个设计模式定义了一个问题--102
7.4.2一个设计模式定义了一个解决
7.4.3设计模式是语言无美的.102
7.4.5模武是经过测试的.103
7.4.6模式是为协作而设计的.103
1.3.1对象..5
1.3.2模式5
1.3.3实践.6
1.3.4本书第2版中的新内容.--.------7
1.4小结.---------7
第2章PHP与对象.--10.
2.1PHP对象的偶然成功.10
4.1静态方法和属性--
4.2
常量属性
4.3拍象类
4.4接.
4.5错误处理
4.6 Final类和方法
4.7使用拦截器-
4.8析构方法-
7.4.4模式定义了一纽词汇
7.4.7设计模或促进良好设计
8.2.1问题.
8.2.2使用组合108
8.3.1问题.110
8.3.2降低耦合---111
8.7.1用于生成对象的模式114
8.7.2用于组织对象和类的模式-114
8.7.3面向任务的模式.114
8.7.4企业模式-----114
8.7.5数据库模式114
9.2.1问题.120
9.2.2-120
9.2.3结果.122
2.1.1最棚:PHPFI.-
2.1.2语法籍:PHP 3.
3.1.1编写第一个关
.-.10
-.14
2.1.3一场静悄的革命:PHP 4---11
2.1.4调抱改变:PHP 5.12
2.2走向未来:PHP 6.-12
2.3拥护和疑虑:关于对象的争.-.13
2.4小结.13
第3章对象基础.--14
3.1类和对象.-14
4.9使用__clone() 复制对象..
4.10定文对象的字符串值56
4.11小结-.----57
第5章对象工.58
5.1PHP和包----.58
5.2类函数和对象函数..-64
7.4为什么使用设计模式.102
7.5PHP与设计模式.-.103
7.6小结104
第8章模式原则.-.105
8.1模式的启示.-105
8.2组合与继承-106
8.3解耦.110
8.4针对接编程,而不是针对实现编程112
8.5变化的概念113
8.6父子关系113
8.7模式.114
8.8小结-.115
第9章生成对象.116
9.1生成对象的问题和解决方法-.116
9.2单例模式.-.119
9.3工厂方法模式---.-.122
3.1.2第一个对象(或两个).15
3.2设置类中的属性.-15
3.3使用方法.18
3.4参数和类型.20
3.4.1基本类型20
5.2.6方法调用------.-.68
5.3.1入门.69
5.3.2开始行动.69
5.3.3检查类71
5.3.4检查方法--72
5.3.5检查方法参数.74
5.3.6使用反射API-75
6.2.1取责.83
6.2.2内聚---83
6.2.3耦合.--83
6.24正交.84
6.7.1代码重复.88
6.7.2类知道的太多-------88
6.7.3万能的英88
6.7.4条件语向------89
6.8.1英图.89
6.8.2时序图.94
7.2.1命名100
7.2.2问题-100
7.2.3解决方案.101
7.2.4效果-101
3.4.2获得提示:对象类.23
2录
5.3反射API.-.-09
5.4小结.78
第6章对象与设计.79
6.1代码设计的定义.-79
6.2面向对象设计和过程式编程.-80
6.3选择类.84
6.4多态-85
6.5封装.-86
6.6忘记细节.-87
6.7四个方向标-88
6.8UML89
6.9小结-..95
第7章什么是设计模式?为何使用它们--98
7.1什么是设计模式.-98
7.2设计模式概览100
7.3《设计模式)格式-101
方案-.
实现-
9.3.1问题
9.3.2实现-
9.3.3结果
9.4抽象工厂模式---
9.4.1问题
9.4.2实现--
9.4.3结果
9.4.4原型模式.
9.4.5问题-
9.4.6实现.
9.5某些模式的术
9.6小结
11.5命令模式.179
11.5.1问题-179
12.2企业架构之外的基础模式.
11.5.2实现i
11.6小结
第12章企业模式.
12.1架构概述
12.3表现层
12.4业务逻辑层
12.1.1模式---------
12.1.2应用程序和层
12.2.1注册表
12.2.2实现
12.3.1前端控制器
13.2.1问题
13.2.2实现
13.23效果
13.3.1问题
13.3.2
实现
13.3.3效果
13.4.1问题
13.4.2实现
13.4.3效果.
13.4.4退加载
13.4.5问题
13.4.6实现
13.4.7效果.
17.3.1创建代库.303
17.3.2配置客户端--------.--.-304
17.3.3在多台机器上运行CVS304
17.6.1添加文件.309
17.6.2删除文件310