第一部分介绍 2
第1章PHP:设计与管理 2
1.1问题 2
1.2PHP和其他语言 3
1.3关于本书 5
1.3.1对象 5
1.3.2模式 5
1.3.3实践 6
1.3.4第3版新增内容 7
1.4小结 7
第二部分对象 10
第2章PHP与对象 10
2.1PHP对象的偶然成功 10
2.1.1最初:PHP/FI 10
2.1.2语法糖:PHP 310
2.1.3一场静悄悄的革命:PHP 411
2.1.4拥抱改变:PHP 512
2.2走向未来:PHP 613
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.3publicprivateprotected管理类的访问 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.7Final类和方法 56
4.8使用拦截器 57
4.9析构方法 61
4.10使用clone复制对象 62
4.11定义对象的字符串值 64
4.12回调、匿名函数和闭包 65
4.13小结 69
第5章对象工具 70
5.1PHP和包 70
5.1.1PHP包和命名空间 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内聚 1
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.8UML 106
6.8.1类图 107
6.8.2时序图 111
6.9小结 112
第三部分模式 117
第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.5PHP与设计模式 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
第四部分实践 294
第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.1packagexml 311
15.5.2packagexml的组成 312
15.5.3contents元素 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.4DocBlock注释 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.3Selenium 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
第五部分结论 396
第20章持续集成 396
20.1什么是持续集成 396
20.2CruiseControl和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
第六部分附录 428
附录A参考文献 428
附录B简单的解析器 431