第一图书网

深入PHP:面向对象、模式与实践(第2版)

Matt Zandstra 人民邮电出版社
出版时间:

2010-5  

出版社:

人民邮电出版社  

作者:

Matt Zandstra  

页数:

383  

译者:

陈浩,吴孙滨,胡丹  

Tag标签:

无  

前言

译者从接触PHP开发到现在接近十年,参加了不少大型互联网应用的开发。在此过程中,有几个问题是译者一直在关注的。中国互联网发展如日中天,全国互联网用户数量增长很快(已达3.5亿人)。当前较为流行的站点往往每天要面对至少上百万的访问者,而且需要提供越来越复杂的服务。作为研发者的我们,应该如何设计站点,让站点能满足当前阶段的业务需求(访问量和服务),并且保证网站有良好的架构设计,方便未来的后续开发和维护?我们应该如何解决代码的“耦合”问题,如何编写出易重用的代码,甚至达到理想化的软件层面的“美学”境界(可能是程序员的终极目标)?如何建立一套行之有效的团队协作机制,使研发团队日常的开发标准化,提高团队沟通和合作的效率。是否有一些放之四海而皆准的准则或通用的工具可以利用?正所谓“水涨船高”,PHP这种为互联网而生的编程语言这些年来也一直在进步。如何充分利用PHP中的新特性,使日常的开发更为高效?读者可以从本书中找到上述问题的部分答案。因为本书不仅仅是一本PHP图书,更是一本鼓励和促进读者超越代码层次,对整个站点的“设计”进行思考的书。条条大路通罗马。要设计出漂亮又实用的站点架构,每个人也许都有自己的体会和经验。但就PHP站点而言,从根本上不外乎“面向过程”和“面向对象”两种比较底层的开发思路。面向过程的开发方式,每个人或每个团队都有自己的开发习惯,不太容易形成系统。所以这么多年来,虽然有不少优秀的面向过程的PHP程序面世,但没能形成任何可供共享的“框架”或“思想”。而面向对象的开发方式,则积累了大量公认的模式和框架。从这个角度来说,建议读者朋友多花时间在面向对象设计上。本书就“面向对象”在PHP中的实现做了非常深入的介绍,涵盖了基础、高级知识以及设计模式的实现。从学习角度来说,译者推荐PHP程序员沿这样的学习路线前进:PHP基础入门(语法、常用函数和扩展等)→面向对象的PHP(本书就是很好的学习资料)→网站软件架构设计(设计模式、框架等)→网站物理层次架构设计(分布式计算、存储、负载均衡、高可用性等)。在现实当中,上述这些阶段和工作其实是交织在一起的。另外,程序设计之外的很多工具和实践经验,也极其重要。因为个人的能力有限,个人的价值必须在团队和企业当中得到体现。本书介绍的很多工具(如版本控制工具、文档工具和应用构建工具等)都可以促进团队协作。最后,真诚邀请读者朋友通过本书来探索PHP。不论你是刚入门的PHP开发人员,还是有多年经验的同行,相信看完本书之后,你都会有收获。当然,一个真正的程序员,他的思想永远是超越具体语言和工具的。期待有一天,读者朋友可以在了解书中这些知识的基础上,总结出属于自己的更加优秀的开发框架甚至是设计思想,开发出在互联网上受到用户欢迎的优秀站点。

内容概要

  《深入PHP:面向对象、模式与实践(第2版)》是PHP专家经典力作的最新版本。书中主要介绍了如何使用面向对象技术和设计模式编写稳定的、可维护的代码,如何使用强大的phpDocumentor自动文档系统创建详细的多功能文档,如何通过管理CVS中的代码和使用Phing构建系统在开发过程中得到更好的灵活性,以及如何使用PEAR包管理解决方案。  《深入PHP:面向对象、模式与实践(第2版)》适合中高级PHP程序员阅读。

作者简介

赞德斯彻(MartZandstra),Yahoo公司的高级程序员,曾从事过教师等工作,著有SamsTeachYourselfPHPin24Hours等书。

书籍目录

第一部分 介绍 第1章 PHP:设计与管理 2 1.1 问题 2 1.2 PHP和其他语言 3 1.3 关于本书 5 1.3.1 对象 5 1.3.2 模式 5 1.3.3 实践 6 1.3.4 本书第2版中的新内容 7 1.4 小结 7 第二部分 对象 第2章 PHP与对象 10 2.1 PHP对象的偶然成功 10 2.1.1 最初:PHP/FI 10 2.1.2 语法糖:PHP 3 10 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 3.1.1 编写第一个类 14 3.1.2 第一个对象(或两个) 15 3.2 设置类中的属性 15 3.3 使用方法 18 3.4 参数和类型 20 3.4.1 基本类型 20 3.4.2 获得提示:对象类型 23 3.5 继承 24 3.5.1 继承问题 24 3.5.2 使用继承 28 3.5.3 public、private、protected:管理类的访问 32 3.6 小结 35 第4章 高级特性 36 4.1 静态方法和属性 36 4.2 常量属性 39 4.3 抽象类 39 4.4 接口 41 4.5 错误处理 43 4.6 Final类和方法 48 4.7 使用拦截器 49 4.8 析构方法 53 4.9 使用__clone()复制对象 54 4.10 定义对象的字符串值 56 4.11 小结 57 第5章 对象工具 58 5.1 PHP和包 58 5.1.1 PHP和命名空间 60 5.1.2 包含路径 62 5.1.3 自动加载 63 5.2 类函数和对象函数 64 5.2.1 查找类 64 5.2.2 了解对象或类 65 5.2.3 了解类中的方法 66 5.2.4 了解类属性 67 5.2.5 了解继承 67 5.2.6 方法调用 68 5.3 反射API 69 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 5.4 小结 78 第6章 对象与设计 79 6.1 代码设计的定义 79 6.2 面向对象设计和过程式编程 80 6.2.1 职责 83 6.2.2 内聚 83 6.2.3 耦合 83 6.2.4 正交 84 6.3 选择类 84 6.4 多态 85 6.5 封装 86 6.6 忘记细节 87 6.7 四个方向标 88 6.7.1 代码重复 88 6.7.2 类知道的太多 88 6.7.3 万能的类 88 6.7.4 条件语句 89 6.8 UML 89 6.8.1 类图 89 6.8.2 时序图 94 6.9 小结 95 第三部分 模式 第7章 什么是设计模式?为何使用它们 98 7.1 什么是设计模式 98 7.2 设计模式概览 100 7.2.1 命名 100 7.2.2 问题 100 7.2.3 解决方案 101 7.2.4 效果 101 7.3 《设计模式》格式 101 7.4 为什么使用设计模式 102 7.4.1 一个设计模式定义了一个问题 102 7.4.2 一个设计模式定义了一个解决方案 102 7.4.3 设计模式是语言无关的 102 7.4.4 模式定义了一组词汇 102 7.4.5 模式是经过测试的 103 7.4.6 模式是为协作而设计的 103 7.4.7 设计模式促进良好设计 103 7.5 PHP与设计模式 103 7.6 小结 104 第8章 模式原则 105 8.1 模式的启示 105 8.2 组合与继承 106 8.2.1 问题 106 8.2.2 使用组合 108 8.3 解耦 110 8.3.1 问题 110 8.3.2 降低耦合 111 8.4 针对接口编程,而不是针对实现编程 112 8.5 变化的概念 113 8.6 父子关系 113 8.7 模式 114 8.7.1 用于生成对象的模式 114 8.7.2 用于组织对象和类的模式 114 8.7.3 面向任务的模式 114 8.7.4 企业模式 114 8.7.5 数据库模式 114 8.8 小结 115 第9章 生成对象 116 9.1 生成对象的问题和解决方法 116 9.2 单例模式 119 9.2.1 问题 120 9.2.2 实现 120 9.2.3 结果 122 9.3 工厂方法模式 122 9.3.1 问题 122 9.3.2 实现 125 9.3.3 结果 126 9.4 抽象工厂模式 127 9.4.1 问题 127 9.4.2 实现 128 9.4.3 结果 129 9.4.4 原型模式 131 9.4.5 问题 132 9.4.6 实现 133 9.5 某些模式的骗术 134 9.6 小结 136 第10章 让面向对象编程更加灵活的模式 137 10.1 构造可灵活创建对象的类 137 10.2 组合模式 137 10.2.1 问题 138 10.2.2 实现 139 10.2.3 效果 143 10.2.4 组合模式小结 146 10.3 装饰模式 146 10.3.1 问题 146 10.3.2 实现 148 10.3.3 效果 151 10.4 外观模式 151 10.4.1 问题 152 10.4.2 实现 153 10.4.3 效果 153 10.5 小结 154 第11章 执行及描述任务 155 11.1 解释器模式 155 11.1.1 问题 155 11.1.2 实现 156 11.1.3 解释器的问题 162 11.2 策略模式 163 11.2.1 问题 163 11.2.2 实现 164 11.3 观察者模式 167 11.4 访问者模式 173 11.4.1 问题 174 11.4.2 实现 175 11.4.3 访问者模式的问题 178 11.5 命令模式 179 11.5.1 问题 179 11.5.2 实现 179 11.6 小结 183 第12章 企业模式 184 12.1 架构概述 184 12.1.1 模式 184 12.1.2 应用程序和层 185 12.2 企业架构之外的基础模式 187 12.2.1 注册表 187 12.2.2 实现 188 12.3 表现层 196 12.3.1 前端控制器 196 12.3.2 应用控制器 205 12.3.3 页面控制器 214 12.3.4 模板视图和视图助手 218 12.4 业务逻辑层 220 12.4.1 事务脚本 221 12.4.2 领域模型 225 12.5 小结 227 第13章 数据库模式 228 13.1 数据层 228 13.2 数据映射器 228 13.2.1 问题 229 13.2.2 实现 229 13.2.3 效果 239 13.3 标识映射 239 13.3.1 问题 240 13.3.2 实现 240 13.3.3 效果 242 13.4 工作单元 243 13.4.1 问题 243 13.4.2 实现 243 13.4.3 效果 246 13.4.4 延迟加载 247 13.4.5 问题 247 13.4.6 实现 247 13.4.7 效果 249 13.5 领域对象工厂 249 13.5.1 问题 249 13.5.2 实现 249 13.5.3 效果 250 13.6 标识对象 252 13.6.1 问题 252 13.6.2 实现 252 13.6.3 效果 256 13.7 选择工厂和更新工厂模式 257 13.7.1 问题 257 13.7.2 实现 257 13.7.3 效果 259 13.8 数据映射器中剩下些什么 260 13.9 小结 262 第四部分 实践 第14章 良好和糟糕的实践 264 14.1 超越代码 264 14.2 借一个轮子 264 14.3 合作愉快 266 14.4 为你的代码插上双翼 267 14.5 文档 267 14.6 测试 268 14.7 小结 269 第15章 PEAR 270 15.1 什么是PEAR 270 15.2 安装PEAR包 271 15.3 使用PEAR包 273 15.4 创建自己的PEAR包 278 15.4.1 package.xml 278 15.4.2 package.xml的组成元素 278 15.4.3 contents元素 279 15.4.4 依赖 282 15.4.5 使用phprelease进行灵活的自定义安装 283 15.4.6 发布包 284 15.4.7 创建自己的PEAR频道 284 15.5 小结 288 第16章 用phpDocumentor生成文档 289 16.1 为什么要使用文档 289 16.2 安装 290 16.3 生成文档 290 16.4 DocBlock注释 292 16.5 类的文档 293 16.6 文件的文档 294 16.7 属性的文档 295 16.8 方法的文档 296 16.9 在文档中创建链接 297 16.10 小结 300 第17章 使用CVS进行版本控制 301 17.1 为什么要使用版本控制 301 17.2 获得CVS 302 17.3 配置CVS代码库 303 17.3.1 创建代码库 303 17.3.2 配置客户端 304 17.3.3 在多台机器上运行CVS 304 17.4 开始项目 305 17.5 更新和提交 307 17.6 增加和删除文件及目录 309 17.6.1 添加文件 309 17.6.2 删除文件 310 17.6.3 添加目录 310 17.6.4 添加二进制文件 311 17.6.5 删除目录 311 17.7 标记和导出项目 312 17.7.1 标记项目 313 17.7.2 通过标签获取项目代码 313 17.7.3 导出项目 314 17.8 创建项目分支 314 17.9 小结 317 第18章 使用PHPUnit进行测试 318 18.1 功能测试与单元测试 318 18.2 手工测试 319 18.3 引入PHPUnit 321 18.3.1 创建测试用例 321 18.3.2 断言方法 322 18.3.3 测试异常 323 18.3.4 运行测试套件 324 18.3.5 约束 326 18.3.6 模拟与桩 328 18.3.7 失败是成功之母 331 18.4 警告 333 18.5 小结 335 第19章 用Phing实现项目的自动 构建 336 19.1 什么是Phing 336 19.2 获取和安装Phing 337 19.3 编写build文档 337 19.3.1 目标 339 19.3.2 属性 340 19.3.3 类型 345 19.3.4 任务 348 19.4 小结 352 第五部分 结论 第20章 对象、模式与实践 354 20.1 对象 354 20.1.1 选择 355 20.1.2 封装和委托 355 20.1.3 解耦 355 20.1.4 复用性 356 20.1.5 美学 356 20.2 模式 356 20.2.1 模式给我们带来了什么 357 20.2.2 模式和设计原则 357 20.3 实践 359 20.3.1 测试 359 20.3.2 文档 359 20.3.3 版本控制 360 20.3.4 自动构建 360 20.3.5 我们还遗漏了什么 360 20.4 小结 361 第六部分 附录 附录A 参考文献 364 附录B 简单的解析器 366

章节摘录

插图:

媒体关注与评论

“本书正是为PHP企业级开发人员和软件工程师量身打造的经典著作,每一位想提高技能的PHP开发人员都应阅读。”  ——KenGuest,爱尔兰PHP用户组主席,PEARQA团队和PEAR组的成员“这是我读过的PHP书中最好的一本,它介绍了PHP面向对象编程的方方面面。我自学PHP已经5年了,我的大多数问题都能在这本书中找到答案。强烈推荐那些有一定PHP经验并想更上一层楼的程序员阅读。”  ——Amazon.com读者评论


编辑推荐

《深入PHP:面向对象、模式与实践(第2版)》全面深入地剖析了面向对象的PHP编程与设计。首先介绍了PHP的OO特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、异常处理、对象克隆等高级主题。然后介绍了设计模式,阐述了模式的概念,展示了如何在PHP中实现几个关键的模式,用专门的章节介绍了企业模式和数据库模式。《深入PHP:面向对象、模式与实践(第2版)》最后一部分围绕PHP应用程序开发,详细介绍了一批极为实用的辅助开发工具,讨论了具有普遍意义的最佳开发实践。《深入PHP:面向对象、模式与实践(第2版)》适合每位PHP程序员进阶参考,帮助他们掌握PHP面向对象设计和开发的精髓,跻身高端PHP程序员之列。Web开发系列世界级专家力作完美结合面向对象思想与PHP技术PHP模块化编程必读

图书封面

图书标签Tags

广告

下载页面


深入PHP:面向对象、模式与实践(第2版) PDF格式下载



才买了这本书,书到了,也看了一部分,总结了一下,这本书的内容的确很诱人,只是译者的水平太烂,面向对象很简单易懂的问题,偏偏让他给翻译成了天书,不仅英文水平烂,国语水平也太烂,很多句子不通顺,病句连篇,怀疑你是不是用GOOGLE翻译翻译出来的,然后印刷了来忽悠钱的哇?如果 是的话,请从实招来~~~


看了50多页了,感觉整个逻辑比好,一步一步扩张进去,能让你清楚明白为什么要那样做的原因,比国内的书好很多了,国内的只会告诉你那样做,而不告诉你为啥,因为很多人都不完全弄懂就出书了


看了两章,感觉不错。不过发现人家那是2007年就出了,中文晚了3年。杯具


有点深度 刚入门的还是算了 有点基础的可以看看


我是初学PHP后阅读的这本书,而且也有了一部分编码经验,这本书算是我第一次阅读接触模式的书籍了,比较喜欢,不过后来没再坚持用PHP,于是这本书有点利用率不高。


好书!对有一定经验的人很有帮助,本来模糊不清的概念,看了一下全都明白了,这是因为以前的工作经验都有涉及,只是没有系统的学习一下,然后看了一下,回忆一下以前的内容,就恍然大悟,感觉很多常用的东西就确确实实那样的,推荐好书!


刚买的,书中讲的东西很不错,但是翻译的有点拗口,包装还好,建议有一定的PHP基础的人看看


如果你想精通面向对象编程,那么还是细致的读上几遍


讲的比较深入,很不错的一本书


很系统的介绍了面向对象相关的模式在php中的应用。


送货3天就到了,内容还没仔细看过,浏览了一下,没什么感觉!


图灵的纸张真心好。书不错,概念多一点,看完后感觉内容好少,一下子就看完了,之后又买了本《实战PHP》,也是超多概念,实例很少,愧对“实战”二字!


质量 很好就是不知道书里的内容怎么样?


这一系列的书水平没得说,值得信赖。不过对初学者可能有些难


内容太抽象,看了等于没看


和拿好哦的书籍


同事推荐的好书


正在看挺喜欢的


学习知识,努力进步!!!!!


作为 oop的入门及项目的管理学习还可以


相关图书