深入PHP:面向对象、模式与实践:第3版(雅虎公司PHP专家力作)
商品已成功飞到您的手机啦!快登录手机站看看吧!
> 扫一扫 下载客户端
> 微信关注“互动出版网”,便捷查询订单,更多惊喜天天有
基本信息
- 原书名:PHP Objects, Patterns and Practice
- 原出版社: Apress
编辑推荐
雅虎公司PHP专家力作
PHP模块化编程必读
完美结合面向对象思想
内容简介
书籍 计算机书籍
《深入PHP:面向对象、模式与实践:第3版》是PHP 专家经典力作的最新版本。书中主要介绍了如何使用面向对象技术和设计模式编写稳定的、可维护的代码,如何使用Subversion 管理多个开发人员,如何使用Phing 和PEAR 进行构建和安装,以及将构建和测试过程自动化的策略,包括持续集成。
《深入PHP:面向对象、模式与实践:第3版》适合中高级PHP 程序员阅读。
作译者
Matt Zandstra 从事互联网应用开发十余年,目前是雅虎公司工程师,从事核心模板管理系统的开发。他是一位多产的技术作家,除本书外另著有Sams Teach Yourself PHP in 24 Hours等,他还为Linux Magazine、php
目录
《深入PHP:面向对象、模式与实践:第3版》
第一部分 介 绍
第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 第3 版新增内容 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 13
2.3 拥护和疑虑:关于对象的争辩 13
2.4 小结 14
第3 章 对象基础 15
3.1 类和对象 15
3.1.1 编写第一个类 15
3.1.2 第一个对象(或两个) 16
3.2 设置类中的属性 17
3.3 使用方法 19
3.4 参数和类型 21
3.4.1 基本类型 22
3.4.2 获得提示:对象类型 24
3.5 继承 26
3.5.1 继承问题 26
3.5.2 使用继承 30
3.5.3 public、private、protected:管理类的访问 35
3.6 小结 39
第4 章 高级特性 40
4.1 静态方法和属性 40
4.2 常量属性 43
4.3 抽象类 44
4.4 接口 46
4.5 延迟静态绑定:static 关键字 47
4.6 错误处理 50
4.7 Final 类和方法 56
4.8 使用拦截器 57
4.9 析构方法 61
4.10 使用__clone()复制对象 62
4.11 定义对象的字符串值 64
4.12 回调、匿名函数和闭包 65
4.13 小结 69
第5 章 对象工具 70
5.1 PHP 和包 70
5.1.1 PHP 包和命名空间 70
5.1.2 自动加载 78
5.2 类函数和对象函数 79
5.2.1 查找类 80
5.2.2 了解对象或类 81
5.2.3 了解类中的方法 82
5.2.4 了解类属性 83
5.2.5 了解继承 83
5.2.6 方法调用 84
5.3 反射API 85
5.3.1 入门 85
5.3.2 开始行动 86
5.3.3 检查类 88
5.3.4 检查方法 89
5.3.5 检查方法参数 91
5.3.6 使用反射API 92
5.4 小结 95
第6 章 对象与设计 96
6.1 代码设计的定义 96
6.2 面向对象设计和过程式编程 97
6.2.1 职责 100
6.2.2 内聚 100
6.2.3 耦合 101
6.2.4 正交 101
6.3 选择类 101
6.4 多态 102
6.5 封装 104
6.6 忘记细节 105
6.7 4 个方向标 105
6.7.1 代码重复 106
6.7.2 类知道的太多 106
6.7.3 万能的类 106
6.7.4 条件语句 106
6.8 UML 106
6.8.1 类图 107
6.8.2 时序图 111
6.9 小结 112
第三部分 模 式
第7 章 什么是设计模式?为何使用它们 114
7.1 什么是设计模式 114
7.2 设计模式概览 116
7.2.1 命名 116
7.2.2 问题 116
7.2.3 解决方案 117
7.2.4 效果 117
7.3 《设计模式》格式 117
7.4 为什么使用设计模式 118
7.4.1 一个设计模式定义了一个问题 118
7.4.2 一个设计模式定义了一个解决方案 118
7.4.3 设计模式是语言无关的 118
7.4.4 模式定义了一组词汇 118
7.4.5 模式是经过测试的 119
7.4.6 模式是为协作而设计的 119
7.4.7 设计模式促进良好设计 119
7.5 PHP 与设计模式 120
7.6 小结 120
第8 章 模式原则 121
8.1 模式的启示 121
8.2 组合与继承 122
8.2.1 问题 122
8.2.2 使用组合 124
8.3 解耦 127
8.3.1 问题 127
8.3.2 降低耦合 128
8.4 针对接口编程,而不是针对实现编程 130
8.5 变化的概念 131
8.6 父子关系 132
8.7 模式 132
8.7.1 用于生成对象的模式 133
8.7.2 用于组织对象和类的模式 133
8.7.3 面向任务的模式 133
8.7.4 企业模式 133
8.7.5 数据库模式 133
8.8 小结 133
第9 章 生成对象 134
9.1 生成对象的问题和解决方法 134
9.2 单例模式 138
9.2.1 问题 138
9.2.2 实现 139
9.2.3 结果 141
9.3 工厂方法模式 141
9.3.1 问题 141
9.3.2 实现 143
9.3.3 结果 145
9.4 抽象工厂模式 146
9.4.1 问题 146
9.4.2 实现 147
9.4.3 结果 148
9.4.4 原型模式 150
9.4.5 问题 150
9.4.6 实现 151
9.5 某些模式的骗术 153
9.6 小结 154
第10 章 让面向对象编程更加灵活的模式 155
10.1 构造可灵活创建对象的类 155
10.2 组合模式 155
10.2.1 问题 156
10.2.2 实现 158
10.2.3 效果 161
10.2.4 组合模式小结 164
10.3 装饰模式 165
10.3.1 问题 165
10.3.2 实现 167
10.3.3 效果 170
10.4 外观模式 170
10.4.1 问题 170
10.4.2 实现 172
10.4.3 效果 172
10.5 小结 173
第11 章 执行及描述任务 174
11.1 解释器模式 174
11.1.1 问题 174
11.1.2 实现 175
11.1.3 解释器的问题 182
11.2 策略模式 183
11.2.1 问题 183
11.2.2 实现 184
11.3 观察者模式 187
11.4 访问者模式 194
11.4.1 问题 194
11.4.2 实现 195
11.4.3 访问者模式的问题 199
11.5 命令模式 200
11.5.1 问题 200
11.5.2 实现 200
11.6 小结 204
第12 章 企业模式 205
12.1 架构概述 205
12.1.1 模式 205
12.1.2 应用程序和层 206
12.2 企业架构之外的基础模式 208
12.2.1 注册表 208
12.2.2 实现 209
12.3 表现层 217
12.3.1 前端控制器 217
12.3.2 应用控制器 227
12.3.3 页面控制器 237
12.3.4 模板视图和视图助手 242
12.4 业务逻辑层 245
12.4.1 事务脚本 245
12.4.2 领域模型 249
12.5 小结 252
第13 章 数据库模式 253
13.1 数据层 253
13.2 数据映射器 253
13.2.1 问题 254
13.2.2 实现 254
13.2.3 效果 265
13.3 标识映射 266
13.3.1 问题 266
13.3.2 实现 266
13.3.3 效果 269
13.4 工作单元 269
13.4.1 问题 269
13.4.2 实现 270
13.4.3 效果 274
13.4.4 延迟加载 274
13.4.5 问题 274
13.4.6 实现 274
13.4.7 效果 276
13.5 领域对象工厂 276
13.5.1 问题 276
13.5.2 实现 277
13.5.3 效果 278
13.6 标识对象 279
13.6.1 问题 279
13.6.2 实现 280
13.6.3 效果 285
13.7 选择工厂和更新工厂模式 285
13.7.1 问题 285
13.7.2 实现 285
13.7.3 效果 288
13.8 数据映射器中剩下些什么 289
13.9 小结 291
第四部分 实 践
第14 章 良好和糟糕的实践 294
14.1 超越代码 294
14.2 借一个轮子 295
14.3 合作愉快 296
14.4 为你的代码插上双翼 297
14.5 文档 297
14.6 测试 298
14.7 持续集成 299
14.8 小结 300
第15 章 PEAR 和Pyrus 301
15.1 什么是PEAR 301
15.2 了解Pyrus 302
15.3 安装PEAR 包 303
15.4 使用PEAR 包 306
15.5 创建自己的PEAR 包 311
15.5.1 package.xml 311
15.5.2 package.xml 的组成 312
15.5.3 contents 元素 313
15.5.4 依赖 316
15.5.5 使用phprelease 进行灵活的自定义安装 317
15.5.6 准备发布包 318
15.5.7 创建自己的PEAR 频道 318
15.6 小结 323
第16 章 用phpDocumentor 生成文档 324
16.1 为什么要使用文档 324
16.2 安装 325
16.3 生成文档 325
16.4 DocBlock 注释 327
16.5 类的文档 328
16.6 文件的文档 330
16.7 属性的文档 330
16.8 方法的文档 331
16.9 在文档中创建链接 333
16.10 小结 335
第17 章 使用Subversion 进行版本控制 336
17.1 为什么要使用版本控制 336
17.2 获得Subversion 337
17.3 配置Subversion 代码库 338
17.4 开始项目 339
17.5 更新和提交 341
17.6 增加和删除文件及目录 344
17.6.1 添加文件 344
17.6.2 删除文件 345
17.6.3 添加目录 345
17.6.4 删除目录 345
17.7 标记和导出项目 345
17.7.1 标记项目 345
17.7.2 导出项目 346
17.8 创建项目分支 347
17.9 小结 350
第18 章 使用PHPUnit 进行测试 351
18.1 功能测试与单元测试 351
18.2 手工测试 352
18.3 引入PHPUnit 354
18.3.1 创建测试用例 354
18.3.2 断言方法 355
18.3.3 测试异常 356
18.3.4 运行测试套件 357
18.3.5 约束 358
18.3.6 模拟与桩 360
18.3.7 失败是成功之母 362
18.4 编写Web 测试 365
18.4.1 为测试重构Web 应用 366
18.4.2 简单的Web 测试 368
18.4.3 Selenium 370
18.5 警告 374
18.6 小结 376
第19 章 用Phing 实现项目的自动构建 377
19.1 什么是Phing 377
19.2 获取和安装Phing 378
19.3 编写build 文档 378
19.3.1 目标 380
19.3.2 属性 382
19.3.3 类型 387
19.3.4 任务 391
19.4 小结 394
第五部分 结 论
第20 章 持续集成 396
20.1 什么是持续集成 396
20.2 CruiseControl 和phpUnderControl 404
20.2.1 安装CruiseControl 404
20.2.2 安装phpUnderControl 406
20.2.3 安装项目 408
20.3 小结 418
第21 章 对象、模式与实践 419
21.1 对象 419
21.1.1 选择 420
21.1.2 封装和委托 420
21.1.3 解耦 420
21.1.4 复用性 421
21.1.5 美学 421
21.2 模式 421
21.2.1 模式给我们带来了什么 422
21.2.2 模式和设计原则 422
21.3 实践 424
21.3.1 测试 424
21.3.2 文档 424
21.3.3 版本控制 425
21.3.4 自动构建 425
21.3.5 持续集成 425
21.3.6 我们还遗漏了什么 425
21.4 小结 426
第六部分 附 录
附录A 参考文献 428
附录B 简单的解析器 431
译者序
译者从接触PHP开发到现在接近10年,参与了不少大型互联网应用的开发。在此过程中,有几个问题是译者一直在关注的。
中国互联网的发展如日中天,全国互联网用户数量增长很快(已达3.5亿人)。当前较为流行的站点往往每天要面对至少上百万的访问者,而且需要提供越来越复杂的服务。
作为研发者的我们,应该如何设计站点,让站点能满足当前阶段的业务需求(访问量和服
务),并且保证网站有良好的架构设计,方便未来的后续开发和维护?我们应该如何解决代码的“耦合”问题,如何编写出易重用的代码,甚至达到理想化的软件层面的“美学”境界(可能是程序员的终极目标)?
如何建立一套行之有效的团队协作机制,使研发团队日常的开发标准化,提高团队沟通和合作的效率?是否有一些放之四海而皆准的准则或通用的工具可以利用?
正所谓“水涨船高”,PHP这种为互联网而生的编程语言这些年来也一直在进步。如何充分利用PHP中的新特性,使日常的开发更为高效?
读者可以从本书中找到上述问题的部分答案。因为本书不仅仅是一本PHP图书,更是一本鼓励和促进读者超越代码层次,对整个站点的“设计”进行思考的书。
条条大路通罗马。要设计出漂亮又实用的站点架构,也许每个人都有自己的体会和经验,但就PHP站点而言,从根本上不外乎“面向过程”和“面向对象”两种比较底层的开发思路。对于面向过程的开发方式,每个人或每个团队都有自己的开发习惯,不太容易形成系统,所以这么多年来虽然有不少优秀的面向过程的PHP程序面世,但没能形成任何可供共享的“框架”或“思想”,而面向对象的开发方式则积累了大量公认的模式和框架。从这个角度来说,建议读者朋友多花时间在面向对象设计上。本书就“面向对象”在PHP中的实现做了非常深入的介绍,涵盖了基础、高级知识以及设计模式的实现。
从学习角度来说,译者推荐PHP程序员沿这样的学习路线前进:PHP基础入门(语法、常用函数和扩展等)→面向对象的PHP(本书就是很好的学习资料)→网站软件架构设计(设计模式、框架等)→网站物理层次架构设计(分布式计算、存储、负载均衡、高可用性等)。在现实当中,上述这些阶段和工作其实是交织在一起的。另外,程序设计之外的很多工具和实践经验,也极其重要。因为个人的能力有限,个人的价值必须在团队和企业当中得到体现。本书介绍的很多工具(如版本控制工具、文档工具和应用构建工具等)都可以促进团队协作。
最后,真诚邀请读者朋友通过本书来探索PHP。不论是刚入门的PHP开发人员,还是有多年经验的同行,相信看完本书之后,你都会有所收获。当然,一个真正的程序员,他的思想永远是超越具体语言和工具的。期待有一天,读者朋友可以在了解书中这些知识的基础上,总结出属于自己的更加优秀的开发框架甚至是设计思想,开发出在互联网上受到用户欢迎的优秀站点。
本书在PHPEye开源社区设有读者反馈版块,网址为http://bbs.phpeye.com/forum-16-1.html。译者将通过这个版块为读者提供勘误和答疑。
陈浩(Haohappy)
2010年3月于上海
媒体评论
“本书正是为PHP企业级开发人员和软件工程师量身打造的经典著作,每一位想提高技能的PHP开发人员都应阅读。”
——Ken Guest,爱尔兰PHP用户组主席,PEAR QA团队和PEAR组的成员
“这是我读过的PHP书中最好的一本,它介绍了面向对象编程的方方面面。我自学PHP已经5年了,遇到的大多数问题都能在这本书中找到答案。强烈推荐那些有一定PHP经验并想更上一层楼的程序员阅读。”
——Amazon.com读者评论