PHP核心技术与最佳实践

PHP核心技术与最佳实践
作 者: 列旭松 陈文
出版社: 机械工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: PHP
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  列旭松,资深PHP技术工程师,精通PHP及其相关技术,对PHP内核原理有较深入的理解,开发经验丰富。曾自主开发了关键字匹配服务器(http://code.google.com/p/sensitive-filter-server/)和消息队列SquirrelMQ(http://code.google.com/p/squirrel-message-queue/)。平时喜欢开发一些实用的PHP扩展,如PHP字典扩展(红黑树算法)(http://code.google.com/p/php-dict/)和PHP索引扩展(B+树算法)(http://code.google.com/p/php-mini-database/)。精通C语言,同时对Web服务器的架构和优化、高并发服务端编程、Redis和Memcached等技术有深入的研究和认识。活跃于PHPChina和ChinaUnix等专业社区,担任PHPChina论坛内核版块版主。 陈文,资深PHP技术工程师,精通PHP及其相关技术,尤其擅长于PHP框架开发和应用架构。他还是一位资深的Java开发工程师,具有Fortran、Scala和C++语言的开发和使用背景,在传统软件和互联网开发领域都有丰富的实战经验。此外,他还擅长TCP/IP编程、多线程与并发程序设计、网络协议分析、数据库性能优化以及各种缓存技术,熟悉MySQL和Oracle等关系数据库产品。现从事网络安全软件开发,以及移动SI业务开发。对语言特性和软件设计思想有独到的见解,追求代码之美和高效率程序开发,爱好钻研底层技术,崇尚和提倡“以理论指导实践”。尤其爱好数学,认为数学是培养和锻炼思维和逻辑能力的重要工具,对算法有一定研究。长期活跃在PHPChina、ITeye和看雪论坛等社区,在PHPChina社区担任版主。

内容简介

《PHP核心技术与最佳实践》是一本致力于为希望成为中高级PHP程序员的读者提供高效而有针对性指导的经典著作。本书系统归纳和深刻解读了PHP开发中的编程思想、底层原理、核心技术、开发技巧、编码规范和最佳实践。 《PHP核心技术与最佳实践》全书分为5个部分:第一部分(1~2章)从不同的角度阐述了面向对象软件设计思想的核心概念、技术和原则,分析了面向对象的特性、设计模式的理念,指出了如何设计低耦合、高可扩展性的软件,等等;第二部分(3~6章)详细讲解了PHP中正则表达式的规范和使用技巧,PHP网络编程的原理、方法、技巧和一些重要的操作,PDO、数据库应用优化,数据库设计和MySQL的高级应用,PHP扩展引擎的原理与实践;第三部分(第7章)拨云见日,围绕PHP扩展开发进行了细致而深入的探讨,解析了PHP的底层实现和Zend虚拟机API,并用PHP扩展开发的实例带领读者走进PHP的底层世界,旨在让读者对PHP性能优化、底层原理进行深入的理解。第四部分(8~11章)重点讨论了缓存的设计、Memcached的原理与实践、NoSQL数据库Redis源码分析与应用实践、高性能PHP网站的架构和设计等内容;第五部分(12~14章)详细讲解了PHP代码的调试和测试、Hash算法和数据库的实现,以及PHP的编码规范,旨在帮助读者提高开发效率,养成良好编程习惯。

图书目录

前言

第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跨域与P3P协议/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