第1章 面向对象思想的核心概念 1
1.1面向对象的“形”与“本” 1
1.1.1对象的“形” 2
1.1.2对象的“本” 4
1.1.3对象与数组 5
1.1.4对象与类 5
1.2魔术方法的应用 7
1.2.1— set和—get方法 8
1.2.2— call和—callStatic方法 9
1.2.3 — toString方法 11
1.3继承与多态 14
1.3.1类的组合与继承 14
1.3.2各种语言中的多态 19
1.4面向接口编程 23
1.4.1接口的作用 23
1.4.2对PHP接口的思考 25
1.5反射 28
1.5.1如何使用反射API 28
1.5.2反射有什么作用 30
1.6异常和错误处理 32
1.6.1如何使用异常处理机制 32
1.6.2怎样看PHP的异常 38
1.6.3 PHP中的错误级别 38
1.6.4 PHP中的错误处理机制 40
1.7本章小结 42
第2章 面向对象的设计原则 44
2.1面向对象设计的五大原则 44
2.1.1单一职责原则 44
2.1.2接口隔离原则 52
2.1.3开放-封闭原则 55
2.1.4替换原则 57
2.1.5依赖倒置原则 59
2.2一个面向对象留言本的实例 62
2.3面向对象的思考 65
2.4本章小结 67
第3章 正则表达式基础与应用 68
3.1认识正则表达式 68
3.1.1 PHP中的正则函数 68
3.1.2正则表达式的组成 69
3.1.3测试工具的使用 69
3.2正则表达式中的元字符 70
3.2.1什么是元字符 71
3.2.2起始和结束元字符 72
3.2.3点号 73
3.2.4量词 74
3.3正则表达式匹配规则 74
3.3.1字符组 74
3.3.2转义 75
3.3.3反义 76
3.3.4分支 77
3.3.5分组 78
3.3.6反向引用 79
3.3.7环视 81
3.3.8贪婪/懒惰匹配模式 83
3.4构造正则表达式 84
3.4.1正则表达式的逻辑关系 85
3.4.2运算符优先级 87
3.4.3正则表达式的常用模式 88
3.5正则在实际开发中的应用 92
3.5.1移动手机校验 92
3.5.2匹配E- mail地址 93
3.5.3转义在数据安全中的应用 93
3.5.4 URL重写与搜索引擎优化 95
3.5.5删除文件中的空行和注释 98
3.6正则表达式的效率与优化 99
3.7本章小结 103
第4章PHP网络技术及应用 105
4.1 HTTP协议详解 105
4.1.1 HTTP协议与SPDY协议 105
4.1.2 HTTP协议如何工作 106
4.1.3 HTTP应用:模拟灌水机器人 110
4.1.4垃圾信息防御措施 116
4.2抓包工具 119
4.2.1抓包工具分类 119
4.2.2 Fiddler功能与原理 119
4.2.3安装Fiddler 120
4.2.4 Fiddler基本界面 121
4.2.5使用Fiddler进行HTTP断点调试 124
4.3 Socket进程通信机制及应用 127
4.3.1进程通信相关概念 127
4.3.2 Socket演示:实现服务器端与客户端的交互 128
4.3.3 Socket函数原型 131
4.3.4 PHP中的Socket函数 131
4.3.5 Socket交互应用:使用Socket抓取数据 134
4.4 cURL工具及应用 136
4.4.1建立cURL请求的基本步骤 136
4.4.2检查cURL错误和获取返回信息 137
4.4.3在cURL中伪造头信息 138
4.4.4在cURL中用POST方法发送数据 140
4.4.5使用cURL上传文件 141
4.4.6 cURL批处理 142
4.4.7 cURL设置项 144
4.4.8网络应用:使用cURL抓取腾讯微博 145
4.5简单邮件传输协议SMTP 151
4.5.1 SMTP协议如何工作 151
4.5.2 SMTP协议常用命令 153
4.5.3 SMTP协议应用:使用Socket发送邮件 153
4.6 WebService的前世今生 157
4.6.1 WebService简介 157
4.6.2认识PHPRPC协议 159
4.6.3 Web服务的实现模式 165
4.6.4简单对象访问协议SOAP 166
4.6.5调试工具soapUI 168
4.7 Cookie详解 170
4.7.1 Cookie的基本概念及设置 170
4.7.2 PHP和JavaScript对Cookie的操作 172
4.7.3 Cookie存储机制及应用 174
4.7.4 Cookie跨域与P3 P协议 175
4.7.5本地存储localStorage 177
4.8 Session详解 179
4.8.1 Session的基本概念及设置 179
4.8.2 Session的工作原理 180
4.8.3 Session入库 181
4.8.4 Cookie与Session问答 185
4.9本章小结 186
第5章PHP与数据库基础 187
5.1什么是PDO 187
5.1.1 PDO预定义类 188
5.1.2如何使用PDO 189
5.1.3 PDO参数绑定与预编译 189
5.1.4 PDO事务处理 191
5.1.5 PDO的效率问题 192
5.2数据库应用优化 193
5.2.1基本语句优化10个原则 193
5.2.2索引与性能分析 194
5.2.3服务器和配置的优化 197
5.2.4 MySQL瓶颈及应对措施 199
5.3数据库设计 200
5.3.1范式与反范式 200
5.3.2数据库分区 201
5.3.3分表的应用 203
5.4 MySQL的高级应用 205
5.4.1 MySQL自增长序列 205
5.4.2 MySQL视图 207
5.4.3 MySQL存储过程和事件调度 210
5.4.4用MySQL模拟消息队列 212
5.4.5 SQL注入漏洞与防范 216
5.5本章小结 220
第6章PHP模板引擎的原理与实践 221
6.1代码分层的思想 221
6.2实现一个简单的模板引擎骨架 224
6.2.1搭建模板引擎基础类骨架 224
6.2.2编译类骨架 226
6.2.3测试模板引擎 229
6.3模板引擎的编译 230
6.3.1实现变量标签 230
6.3.2实现foreach标签 231
6.3.3实现if&else标签 233
6.3.4对PHP原生语法的支持 234
6.4完善模板引擎 235
6.4.1模板缓存机制的实现 235
6.4.2调试和缓存清理 236
6.4.3如何使用模板 244
6.5常用模板引擎 245
6.5.1 Discuz模板引擎 245
6.5.2 Smarty模板引擎 246
6.5.3 DedeCms模板引擎 247
6.5.4 Blitz模板引擎 248
6.5.5模板引擎的一些思考 249
6.6本章小结 251
第7章PHP扩展开发 252
7.1为什么要开发PHP扩展 252
7.2搭建PHP扩展框架 252
7.2.1 PHP源代码目录 252
7.2.2 ext_ skel工具 253
7.2.3 Windows平台环境配置 253
7.2.4 Linux平台环境配置 256
7.2.5 PHP的生命周期 257
7.3 PHP内核中的变量 260
7.3.1 PHP变量在内核中的存储方式 260
7.3.2 PHP内核变量访问宏 262
7.3.3引用计数器与写时复制 263
7.4 PHP内核中的HashTable分析 265
7.4.1 PHP内核HashTable的数据结构 265
7.4.2 HashTable的代码实现 270
7.5 Zend API详解与扩展编写 274
7.5.1什么是Zend引擎 274
7.5.2 Zend引擎内存管理 275
7.5.3 PHP扩展的架构 276
7.5.4接收用户传递的参数 283
7.5.5在PHP扩展中创建变量 290
7.5.6在PHP扩展中为变量赋值 293
7.5.7错误和输出API 304
7.5.8运行时信息函数 306
7.5.9调用用户自定义函数 307
7.5.10 PHP配置项 309
7.5.11创建常量的宏 312
7.6编写一个完整的扩展 313
7.6.1链表结构的实现 313
7.6.2创建PHP扩展框架 319
7.6.3编写代码 319
7.6.4编译安装扩展 327
7.6.5测试扩展 328
7.7本章小结 329
第8章 缓存详解 330
8.1认识缓存 330
8.1.1为什么使用缓存 330
8.1.2命中率 331
8.1.3缓存更新策略 332
8.1.4缓存最大数据量 333
8.2文件缓存 333
8.2.1文件缓存机制 333
8.2.2文件缓存开源产品Secache 335
8.3 Opcode缓存 337
8.3.1 eAccelerator下载及使用 337
8.3.2如何查看Opcode 338
8.4客户端缓存 340
8.4.1客户端缓存规则 340
8.4.2 HTTP协议中的缓存使用 341
8.4.3 HTTP缓存实例 343
8.4.4 HTML 5中的Application Cache 345
8.5 Web服务器缓存 347
8.5.1 Apache缓存 347
8.5.2 Nginx缓存 348
8.6本章小结 349
第9章Memcached使用与实践 350
9.1为什么要用Memcached 350
9.2 Memcached的安装及使用 350
9.2.1安装Memcached服务器 351
9.2.2安装Memcached客户端 352
9.2.3使用memcache扩展访问Memcached服务器 353
9.2.4使用Memcached加速Web应用 356
9.3深入了解Memcached 357
9.3.1 Memcached如何支持高并发 357
9.3.2使用Slab分配算法保存数据 357
9.3.3删除过期item 361
9.3.4使用LRU算法淘汰数据 362
9.3.5 Memcached多线程模型 363
9.4 Memcached分布式布置方案 366
9.4.1普通Hash分布 366
9.4.2一致性Hash分布 367
9.4.3一致性Hash分布算法实例 369
9.5本章小结 371
第10章Redis使用与实践 372
10.1 Redis的安装及使用 372
10.1.1 Redis安装步骤 372
10.1.2修改Redis配置文件 373
10.1.3运行Redis服务器 374
10.1.4 key相关命令 374
10.1.5 Redis支持的数据类型 375
10.1.6 Redis排序命令详解 382
10.2事务处理 384
10.2.1事务处理原理 384
10.2.2事务处理实现 385
10.3持久化 387
10.3.1内存快照 387
10.3.2日志追加 387
10.4主从同步 388
10.4.1 Redis主从同步原理 388
10.4.2 Slave端的工作流程 389
10.4.3 Master端的工作流程 392
10.5虚拟内存 397
10.5.1配置文件信息 397
10.5.2开启VM的后台操作 398
10.5.3 Redis Object和VM Pointer 399
10.5.4交换过程 400
10.5.5 阻塞式VM 403
10.5.6非阻塞式VM 405
10.6扩展库phpredis安装及使用 408
10.7 Redis应用实践 409
10.7.1使用消息队列发布微博 409
10.7.2 Redis替代文件存储Session 410
10.8深入了解Redis内核 413
10.8.1内存淘汰 413
10.8.2对象引用计数器 415
10.8.3自动关闭超时连接 418
10.8.4清除过期数据 419
10.9本章小结 421
第11章 高性能网站架构方案 422
11.1如何优化网站响应时间 422
11.1.1吞吐率 423
11.1.2压力测试 423
11.1.3持久连接 426
11.2 MySQL响应速度提高方案:HandlerSocket 429
11.2.1 HandlerSocket工作原理 430
11.2.2 HandlerSocket安装和配置 430
11.2.3 PHP-HandlerSocket性能测试 432
11.3 MySQL稳定性提高方案:主从复制 433
11.3.1主从复制工作原理 433
11.3.2主从复制配置 434
11.3.3连接主从服务器 436
11.4 Web应用加速方案:Varnish 438
11.4.1传统代理与反向代理 438
11.4.2 Varnish安装和配置 439
11.4.3 Varnish性能测试 440
11.4.4修改缓存规则 442
11.4.5监控Varnish运行状态 444
11.5异步计算方案:Gearman 445
11.5.1 Gearman工作原理 445
11.5.2安装Gearman和PHP扩展 447
11.5.3使用Gearman异步发送邮件 447
11.6本章小结 449
第12章 代码调试和测试 450
12.1调试PHP代码 450
12.1.1 PHP调试函数 450
12.1.2断点调试与变量跟踪工具Xdebug 454
12.2前端调试 457
12.2.1 Firebug调试API 457
12.2.2使用Firebug调试DOM结构 459
12.2.3使用Firebug调试JavaScript 460
12.2.4使用Fiddler调试远程服务器上的文件 462
12.3日志管理 463
12.3.1 PHP日志 463
12.3.2 Apache服务器日志 464
12.3.3 MySQL日志 465
12.4代码性能测试技术 468
12.4.1时间点测试 468
12.4.2文件查看工具WinCacheGrind 469
12.4.3性能测试注意事项 471
12.5单元测试 472
12.5.1单元测试框架PHPUnit的安装 472
12.5.2结合NetBeans使用PHPUnit进行单元测试 473
12.5.3 PHPUnit中的断言函数 476
12.5.4 PHPUnit常用方法 478
12.5.5 PHPUnit常用注解 478
12.6压力测试 480
12.6.1使用JMeter压力测试HTTP 480
12.6.2压力测试MySQL 484
12.6.3 JMeter+Badboy组合测试 487
12.7本章小结 489
第13章Hash算法与数据库实现 490
13.1 Hash函数 490
13.2 Hash算法 490
13.2.1直接取余法 490
13.2.2乘积取整法 490
13.2.3经典Hash算法Times33 491
13.3 Hash表 491
13.3.1 Hash表结构 491
13.3.2使用PHP实现Hash表 492
13.3.3 Hash表冲突 493
13.3.4拉链法解决冲突 494
13.4一个小型数据库的实现 496
13.4.1 pack函数的用法 497
13.4.2 unpack函数的用法 499
13.4.3索引文件和数据文件 500
13.4.4数据库接口方法 501
13.4.5源代码解析 502
13.4.6测试代码 509
13.5本章小结 510
第14章PHP编码规范 511
14.1文件格式 511
14.1.1文件标记 511
14.1.2文件和目录命名 512
14.1.3文件目录结构 512
14.2命名规范 513
14.2.1变量命名 513
14.2.2类及接口命名 514
14.2.3数据库命名 514
14.2.4习惯与约定 515
14.3注释规范 516
14.3.1程序注释 516
14.3.2文件注释 518
14.3.3类/接口注释 518
14.3.4方法和函数注释 518
14.3.5标注的使用 519
14.4代码风格 520
14.4.1缩进和空格 520
14.4.2语句断行 520
14.4.3更好的习惯 521
14.5本章小结 521