第一部分 OOP和模式 2
第1章 抽象类、接口和契约式编程 2
1.1 抽象类 2
1.2 接口 4
1.3 instanceof操作符 7
1.4 契约式编程 8
1.5 小结 8
第2章 静态变量、成员和方法 9
2.1 静态变量 9
2.2 类中静态元素的使用 10
2.2.1 静态成员 10
2.2.2 冒号(paamayim nekudotayim) 11
2.2.3 静态方法 14
2.3 “静态”特性的争论 15
2.4 小结 15
第3章 单例模式和工厂模式 17
3.1 职责和单例模式 17
3.2 工厂模式 19
3.2.1 图像对象工厂 20
3.2.2 可移植的数据库 22
3.3 小结 24
第4章 异常 26
4.1 实现异常 26
4.1.1 异常元素 26
4.1.2 扩展异常 28
4.2 记录异常日志 30
4.2.1 记录自定义异常的日志 30
4.2.2 定义未捕捉的异常处理程序 31
4.3 异常产生的开销 31
4.4 错误代码 32
4.5 类型提示和异常 33
4.6 重新抛出异常 33
4.7 小结 34
第5章 PHP 6中的新特性 35
5.1 安装PHP 35
5.2 PHP 6中的Unicode支持 37
5.2.1 Unicode语义 37
5.2.2 Unicode排序规则 39
5.3 命名空间 40
5.4 延迟静态绑定 41
5.5 具有动态特性的静态方法 43
5.6 三目运算符(ifsetor) 43
5.7 XMLWriter类 43
5.8 小结 45
第二部分 测试和文档编写第6章 文档编写和编码规范 48
6.1 编码规范 48
6.2 PHP注释和文法解析 49
6.2.1 注释的类型 50
6.2.2 关于文档注释的更多信息 50
6.2.3 文法解析 51
6.2.4 元数据 51
6.3 PHPDoc 52
6.4 DocBook 55
6.4.1 创建DocBook要用到的XML文件 55
6.4.2 解析DocBook文件 56
6.4.3 使用DocBook的元素 59
6.5 小结 62
第7章 反射API 64
7.1 反射API介绍 64
7.1.1 获得用户声明的类 65
7.1.2 理解使用反射技术的插件架构 66
7.2 解析基于反射的文档数据 71
7.2.1 安装文档块分词器 72
7.2.2 访问文档注释数据 73
7.2.3 给文档注释数据做分词处理 73
7.2.4 解析标识符 74
7.3 扩展反射API 76
7.3.1 解析器与反射API的集成 77
7.3.2 扩展反射类 78
7.3.3 更新解析器以处理行内标签 85
7.3.4 添加特性 88
7.4 小结 92
第8章 测试、部署和持续集成 93
8.1 用作版本控制的Subversion 93
8.1.1 安装Subversion 94
8.1.2 设置Subversion 94
8.1.3 提交修改和解决冲突 95
8.1.4 激活对Subersion的访问功能 97
8.2 用于单元测试的PHPUnit 98
8.2.1 安装PHPUnit 98
8.2.2 创建第一个单元测试 98
8.2.3 理解PHPUnit 100
8.3 用于部署的Phing 102
8.3.1 安装Phing 102
8.3.2 编写Phing部署脚本 103
8.4 Xinc,持续集成服务器 106
8.4.1 安装Xinc 106
8.4.2 创建Xinc配置文件 106
8.4.3 启动Xinc 107
8.5 用于调试的Xdebug 107
8.5.1 安装Xdebug 108
8.5.2 使用Xdebug跟踪代码执行 108
8.5.3 使用Xdebug执行基准测试 110
8.5.4 使用Xdebug检查代码覆盖 110
8.5.5 使用Xdebug进行远程调试 111
8.6 小结 111
第三部分 SPL(标准PHP库)第9章 SPL简介 114
9.1 SPL基础 114
9.2 迭代器 115
9.2.1 Iterator接口 115
9.2.2 迭代器辅助函数 116
9.3 数组重载 117
9.3.1 ArrayAccess接口 117
9.3.2 计数和数组访问 117
9.4 观察者模式 118
9.5 序列化 121
9.6 SPL自动加载 123
9.7 对象标识符 126
9.8 小结 126
第10章 SPL迭代器 128
10.1 迭代器接口和迭代器 128
10.1.1 迭代器接口 128
10.1.2 迭代器 130
10.2 迭代器的实际用法 142
10.2.1 使用SimpleXML解析XML文件 142
10.2.2 使用DBA访问平面文件数据库 143
10.3 小结 144
第11章 SPL文件和目录处理 145
11.1 文件和目录信息 145
11.2 目录的迭代访问 147
11.2.1 列出文件和目录的清单 148
11.2.2 查找文件 150
11.2.3 创建自定义文件过滤迭代器 151
11.3 SPL文件对象操作 153
11.3.1 文件内容的迭代访问 153
11.3.2 CSV操作 153
11.3.3 搜索文件 157
11.4 小结 158
第12章 SPL数组重载 160
12.1 ArrayAccess接口介绍 160
12.2 ArrayObject介绍 161
12.3 创建一个SPL购物车 162
12.4 使用对象作为键值 165
12.5 小结 168
第13章 SPL异常 169
13.1 逻辑异常 169
13.2 运行时异常 171
13.3 无效函数调用异常和无效方法调用异常 171
13.4 域异常 172
13.5 范围异常 172
13.6 无效参数异常 173
13.7 长度异常 174
13.8 溢出异常 175
13.9 向下溢出异常 175
13.10 小结 177
第四部分 MVC模式 180
第14章 MVC架构 180
14.1 为什么使用MVC 180
14.2 MVC应用程序布局 181
14.2.1 从Web服务器开始 181
14.2.2 动作和控制器 182
14.2.3 模型 182
14.2.4 视图 182
14.3 选择MVC框架的标准 182
14.3.1 MVC框架的架构 182
14.3.2 MVC框架文档 183
14.3.3 MVC框架的社区 183
14.3.4 MVC框架的支持 183
14.3.5 MVC框架的灵活性 184
14.4 实现MVC框架 184
14.4.1 设置一个虚拟主机 184
14.4.2 创建一个MVC框架 185
14.5 小结 191
第15章 Zend框架简介 192
15.1 设置Zend框架 192
15.1.1 安装Zend框架 192
15.1.2 创建一个虚拟主机 193
15.1.3 引导文件 194
15.2 创建控制器、视图和模型 196
15.2.1 添加索引控制器 196
15.2.2 添加视图 196
15.2.3 定义模型 197
15.3 添加功能 200
15.3.1 使用request和response对象 201
15.3.2 使用内置的操作辅助类 202
15.3.3 使用内置的视图辅助类 203
15.3.4 验证输入信息 204
15.4 小结 208
第16章 Zend框架高级功能 209
16.1 管理配置文件 209
16.1.1 使用数组的方法 209
16.1.2 INI方法 210
16.1.3 XML方法 210
16.2 设置站点级别的视图变量 211
16.3 共享对象 211
16.4 错误处理 212
16.5 应用程序日志记录 213
16.6 缓存 214
16.6.1 缓存功能在安全性上的考虑 214
16.6.2 缓存技术 215
16.7 验证用户 217
16.8 在PHP语言中使用JSON 220
16.9 自定义路由 221
16.10 管理会话 223
16.11 发送邮件 224
16.12 创建PDF文件 225
16.12.1 创建新的PDF页面 226
16.12.2 在PDF页面上绘图 226
16.13 与Web服务相集成 228
16.14 小结 229
第17章 应用Zend框架 230
17.1 模块和模型设置 230
17.1.1 常规的模块化的目录结构 230
17.1.2 模型库和Zend_Loader 231
17.2 请求生命周期 232
17.3 创建插件 233
17.4 创建辅助类 234
17.4.1 编写操作辅助类 234
17.4.2 编写视图辅助类 234
17.5 实现访问控制功能 235
17.6 使用两步视图 238
17.6.1 创建一个主布局 238
17.6.2 使用占位符 239
17.7 小结 240
第五部分 Web2.0 242
第18章 Ajax和JSON 242
18.1 JSON和PHP 242
18.1.1 JSON扩展 243
18.1.2 Zend框架中的JSON 244
18.2 JSON和JavaScript 244
18.3 一些Ajax项目 248
18.3.1 GET请求 248
18.3.2 POST请求 249
18.4 小结 252
第19章 Web服务和SOAP协议介绍 253
19.1 PHP Web服务架构介绍 253
19.2 WSDL介绍 254
19.2.1 WSDL术语 254
19.2.2 WSDL文件 254
19.3 SOAP介绍 256
19.4 使用PHP SOAP扩展 257
19.4.1 SoapClient类的方法和选项 259
19.4.2 SoapServer类的方法和选项 261
19.5 真实的示例 261
19.6 小结 264
第20章 高级Web服务 265
20.1 复杂类型 265
20.1.1 复杂类型示例 265
20.1.2 类映射 270
20.2 身份验证 271
20.2.1 HTTP验证 271
20.2.2 通信密钥验证 271
20.2.3 客户端证书验证 272
20.3 会话 272
20.4 对象和持久化 273
20.5 二进制数据传输 274
20.6 小结 276
第21章 证书验证 277
21.1 PKI安全性 277
21.1.1 CA 277
21.1.2 Web服务器证书 278
21.1.3 客户端证书 278
21.1.4 根CA证书 278
21.2 设置客户端证书验证 278
21.2.1 创建客户端的证书验证机制 279
21.2.2 创建一个自签名的Web服务器证书 281
21.2.3 为SSL配置Apache服务器 283
21.2.4 创建客户端证书 284
21.2.5 只允许证书验证过的客户端访问服务器 286
21.2.6 测试证书 287
21.3 PHP验证控制 287
21.3.1 将PHP绑定到证书上 288
21.3.2 设置Web服务验证 288
21.4 小结 289