猜你喜欢
PHP核心技术与最佳实践(第2版)

PHP核心技术与最佳实践(第2版)

书籍作者:列旭松 陈文 ISBN:9787111608417
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:6393
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

内容简介
PHP领域公认的标杆之作,被誉为“PHP开发工程师能力进阶的必读书”,致力于为希望成为中高级PHP程序员的读者提供全面、高效的指导。
本书第1版出版于2012年,累计印刷超过10次,6年后全新升级,一方面根据PHP技术新的发展删除和更新了一些过时的内容,另一方面对原来的部分内容作了深度优化。
全书共13章,逻辑上分为5个部分:
部分(1~2章):从不同的角度阐述了面向对象软件设计思想的核心概念、技术和原则,分析了面向对象的特性、设计模式的理念,指出了如何设计低耦合、高可扩展性的软件,等等。
第二部分(3~6章):详细讲解了PHP网络编程的原理、方法、技巧和一些重要的操作,PDO、数据库应用优化,数据库设计和MySQL的高级应用,PHP框架的实现原理。
第三部分(第7章):围绕PHP扩展开发进行了细致而深入的探讨,解析了PHP的底层实现和Zend虚拟机API,并用PHP扩展开发的实例带领读者走进PHP的底层世界,旨在让读者对PHP性能优化、底层原理进行深入的理解。
第四部分(8~10章):重点讨论了缓存的设计、Memcached的原理与实践、NoSQL数据库Redis源码分析与应用实践等内容。
第五部分(12~13章)详细讲解了PHP代码的调试和测试、Hash算法和数据库的实现。

作者简介

陈文

资深软件工程师和PHP技术专家,有超过15年的软件开发经验。

深耕于网络安全、互联网金融等领域,长期在PHP、Java、C++等技术领域的一线从事开发、架构方面的工作,擅长TCP/IP编程、多线程和并发程序设计、中间件开发、网络安全等。

兴趣广泛,提倡“理论指导实践”,对软件设计思想有独到的见解,追求代码之美和高效率程序开发,爱好钻研底层技术。


列旭松

资深软件工程师和PHP技术专家,有超过10年的PHP开发经验。

现就职于唯品会,担任资深工程师,曾任职于YY语音。熟识PHP、C语言和Go语言,对PHP底层实现原理有较深理解。热衷于开源事业,开源过多个PHP相关的扩展,流行的PHP源码加密扩展(PHP-Beast)作者。此外,对Redis、Memcached等分布式缓存系统有深入研究和丰富的实践经验。

个人github地址:https://github.com/liexusong


编辑推荐
适读人群 :本书所面向的读者对象可以划分为:(1)所有有一定开发经验的PHP程序员;(2)服务器端以PHP作为主要语言的项目的架构师。

(1)本书第1版是PHP领域的畅销书,出版6年仍热销,累计印刷10余次,成为PHP领域公认的标杆之作
(2)两位作者在PHP领域的开发经验均超过10年,一直奋斗在PHP开发的一线。
(3)系统归纳和深刻解读了PHP开发中的编程思想、底层原理、核心技术、开发技巧。
(4)第2版在第1版的基础上做了大量的更新、删除和增强,累计近20个知识点。

前言
本书的第1版写作于2011年,并在2012年末出版,至今已经过去六七年了。本书第1版受到了许多读者的热爱,并得到了很多有建设性的意见。
PHP到底要怎么学?学什么?一个中高级PHP程序员应该是什么样的?我想这也是很多PHP新手和工作了一两年的PHP开发者的疑惑。本书所要解决的就是这一系列问题。很欣慰收到了许多读者的来信,反馈本书第1版帮助他们在PHP的道路上越走越远,读者的来信让我感受到了鼓励,也感受到了压力。
随着PHP社区的发展,以及整个互联网开发领域层出不穷的新技术和新理论,第1版的一些内容已经跟不上技术的发展,我们深感有必要在第1版的基础上做出大的更新,以满足读者的需求。
我们先来看一看第1版写作至今,PHP社区以及互联网开发领域技术的一些发展。
1)PHP版本从主流的PHP5.3发展到PHP7,性能有了一倍以上的提升,无论是语法还是PHP内核,都有了许多新变化。
2)面向对象开发理念已深入人心,PHP框架存在的必要性也已达成共识。模板引擎和PEAR基本退出PHP框架开发领域,PHP框架开始使用Composer管理依赖和构建,Composer已经发展成为一种必备技能。
3)数据库领域,事务的重要性更多被提及和承认。随着业务规模的增长,单机已经不能满足业务需求,分布式事务、数据库中间件以及全文搜索已经成了数据库里常用的三个工具。同时,NoSQL也从一个小众技术发展为主流技术。
4)分布式的概念已经尽人皆知,服务治理和微服务的概念横空出世并在PHP领域越来越受到重视,Docker等容器概念也已成为寻常技术。
基于上述变化,本书的第2版应运而生,引入了更多内容,并去除了已经过时和淘汰的篇章。
在我看来,一本技术书籍的价值在于其对知识的提炼和其与众不同的地方。举例来说,到一个书店去看书,你最想用笔抄下来或用手机拍下来的那几页,就是对你帮助最大的部分,也是你认为这本书的价值所在。正是基于这个想法,我们思考了第2版该写什么,怎么写,哪些地方会对读者有帮助。我们试图从不同的角度带领读者来看PHP,给这本书注入一些不一样的东西。我希望这是一件有意义的事。
新技术和新理念爆炸式增长,一本书不能说尽天下事,但是我还是希望本书能够帮到你。
本书适合的对象
PHP爱好者;
掌握了PHP语法基础,想要进阶的初级程序员;
对PHP框架和扩展开发感兴趣的读者;
对NoSQL应用和实现原理感兴趣,对高并发感兴趣的读者;
对PHP网络应用感兴趣,想知道HTTP协议、Socket等更多细节的读者;
想要在大型互联网公司的PHP面试中获得成功的读者;
开设相关课程的大专院校的学生;
公司内部培训的学员。
如何阅读本书
本书一共有13章。每个章节都可以单独阅读,但部分知识点存在一定的衔接,建议按先后顺序阅读。
第1章主要讲解了面向对象开发的思想,重点讲述面向对象模型的建立,以及面向对象的一些基础概念。本章通过大量的对比和举例,尤其是与Java的对比,力图从不同的角度来讲解PHP的面向对象特性,让读者加深理解,也让PHP程序员看到不同的面向对象。求同存异是本章的核心思想。
第2章用简练的语言讲解面向对象设计的五大原则,这五大原则也是理解设计模式的基础所在,目的在于帮助读者站在一个更高的角度来思考面向对象的问题。
第3章着重介绍HTTP协议、Socket开发和TCP/IP抓包工具的使用,WebService、Cookie和Session的使用等。结合实战,向读者阐述网络开发的核心和重点,特别是对HTTP协议的理解。HTTP协议是Web开发的基石,也是各种面试和开发中必然会遇到的知识点。而Socket则是应用交互的桥梁,保证了应用的可扩展性。
第4章着重介绍RPC的概念,包括其定义和组成元素,然后以ZooKeeper和etcd为例,介绍服务注册和发现的概念。读者在学习了本章内容后,就能对微服务中最关键的服务治理有更清晰的了解,进而理解微服务中服务治理组件的原理。
第5章没有介绍CRUD,而是主要介绍PDO、MySQL优化、事务、存储过程和事件调度机制以及MySQL安全防范。随着PHP社区的发展以及PHP7带来的性能提升,PHP在互联网大型应用中起到了举足轻重的作用。在这些大型应用中,事务是个很关键的东西,用好事务,才能保证数据的一致性和准确性。同时,针对大型应用中涉及的性能优化这一块,本章讲解了分表分库、MySQL中间件以及全文搜索的知识。读者在学习了本章后,对MySQL的性能优化和扩展会有一个更清晰的把握和理解。
第6章以MVC为理论依据,从零开始写一个简单的PHP框架,讲解控制器层、数据模型层、视图层的原理和实现,并且引入了自动加载、异常管理、拦截器的概念。随着PSR规范的完善以及Composer构建工具的流行,使用Composer来管理依赖已经成为一种很流行和通用的做法,因此我们在本章中介绍了Composer的概念,并用其改造了我们的框架,最后介绍了控制反转与依赖注入的概念。
第7章是本书的核心所在,介绍PHP扩展开发的几个重要知识点,如扩展框架搭建、PHP生命周期和PHP变量在内核中的实现方式、Zend引擎、内存管理等。最后讲解唯一ID生成扩展实例,帮助读者巩固前面学到的知识。通过学习本章,读者可以深入到PHP底层,做到知其然也知其所以然。
第8章主要介绍缓存的基本原理和三个衡量指标,通过几个实例讲解,加深读者对缓存的理解。学习本章后,读者应该能设计出一个比较合理的缓存方案。除了缓存的基本概念外,本章还讲述了Opcache服务端缓存和客户端缓存的应用。
第9章不是对Memcached的泛泛而谈,而是深入Memcached的实现和内部结构,让读者掌握Memcached的高级应用,对架构复杂环境的缓存层有清晰的认识。
第10章重点介绍Redis的深入应用,如事务处理、主从同步等,和第9章类似,同样深入探讨了Redis的实现内幕。最后,本章着重讲解了Redis集群的原理和落地实现,合理利用Redis可以为我们解决大流量高并发的应用。
第11章探讨了高性能架构的基本出发点,重点以HandlerSocket的使用、MySQL主从复制、反向代理缓存软件Varnish和任务分发框架Gearman为例,讲述了几种高性能架构中会使用的技术。
第12章科学的调试方法有助于快速找出潜在的BUG和理解复杂应用的流程,提高开发效率。单元测试是代码质量的保障。最后,介绍了使用JMeter进行压力测试的方法。
第13章通过介绍Hash算法的基本原理,然后用此算法实现一个简单的基于Hash的数据库,让读者意识到算法的重要性和可操作性。
本书第1、2、3、5、6、8、12章由陈文撰写,第7、9、10、11、13章由列旭松撰写,第4章由两人共同参与完成。
勘误和支持
由于水平和开发经验有限,且计算机技术更新较快,在撰写的过程中难免有不足,有些章节的内容可能在未来的某个时候不再适用,还望读者理解和体谅,并恳请读者批评指正。如果你有好的建议,或者对书中部分内容有疑惑,可与我们联系,我们将尽量为读者提供满意的解答。
联系方式:
陈文:[email protected]
列旭松:[email protected]
期待能够得到你们的真挚反馈。
感谢
首先要感谢PHP之父——Rasmus Lerdorf,是他创建了这个简单、轻松、有趣、快速而高效的语言。
其次要感谢PHP社区每一位充满活力的朋友,正是在和你们的交流中,使我学到了更多的东西,本书有不少内容来自于社区的智慧。
这是我和列旭松合著的第一本书,在这里尤其要感谢机械工业出版社的大力支持,特别是杨福川老师和张锡鹏老师,在一年多的时间里,是你们耐心地指导和认真编审才有了这本书的诞生。
还要感谢我的合作人列旭松的大力支持,正是他完成了本书最核心的章节,在后期与出版社和编辑沟通,并在稿件修改上付出了很多心血才保证书稿得以按时完成。
最后,还要感谢我的家人和朋友的支持。

陈文
目录
前言
第1章 面向对象思想的核心概念1
1.1 面向对象的“形”与“本”2
1.1.1 对象的“形”2
1.1.2 对象的“本”4
1.1.3 对象与数组6
1.1.4 对象与类6
1.2 魔术方法的应用8
1.2.1 set和get方法8
1.2.2 call和callStatic方法…11
1.2.3 toString方法和debugInfo方法13
1.3 命名空间与自动加载18
1.3.1 理解命名空间18
1.3.2 自动加载21
1.4 继承与多态21
1.4.1 类的组合与继承22
1.4.2 各种语言中的多态26
1.5 面向接口编程30
1.5.1 接口的作用30
1.5.2 对PHP接口的思考32
1.6 反射35
1.6.1 如何使用反射API35
1.6.2 反射有什么作用37
1.7 异常和错误处理39
1.7.1 如何使用异常处理机制39
1.7.2 怎样看PHP的异常45
1.7.3 PHP中的错误级别45
1.7.4 PHP中的错误处理机制47
1.7.5 PHP7对异常机制的改进49
1.8 本章小结53
第2章 面向对象的设计原则54
2.1 面向对象设计的五大原则55
2.1.1 单一职责原则55
2.1.2 接口隔离原则63
2.1.3 开放-封闭原则66
2.1.4 替换原则69
2.1.5 依赖倒置原则71
2.2 一个面向对象留言本的实例73
2.3 面向对象的思考77
2.4 本章小结78
第3章 PHP网络技术及应用79
3.1 HTTP协议详解79
3.1.1 HTTP协议与HTTP/2协议…79
3.1.2 HTTP协议如何工作81
3.1.3 HTTP应用:模拟灌水机器人86
3.1.4 垃圾信息防御措施92
3.2 抓包工具96
3.2.1 抓包工具分类96
3.2.2 Fiddler功能与原理96
3.2.3 安装Fiddler97
3.2.4 Fiddler基本界面98
3.2.5 使用Fiddler进行HTTP断点调试101
3.3 Socket进程通信机制及应用104
3.3.1 进程通信相关概念104
3.3.2 Socket演示:实现服务器端与客户端的交互105
3.3.3 使用wireshar分析TCP/IP数据包108
3.3.4 Socket函数原型114
3.3.5 PHP中的Socket函数114
3.3.6 Socket交互应用:使用Socket抓取数据117
3.4 cURL工具及应用119
3.4.1 建立cURL请求的基本步骤119
3.4.2 检查cURL错误和获取返回信息120
3.4.3 在cURL中伪造头信息122
3.4.4 在cURL中用POST方法发送数据124
3.4.5 使用cURL实现简单的文件上传服务125
3.4.6 cURL批处理129
3.4.7 cURL设置项130
3.5 简单邮件传输协议SMTP131
3.5.1 SMTP协议如何工作132
3.5.2 SMTP协议常用命令133
3.5.3 SMTP协议应用:使用Socket发送邮件133
3.6 WebService的前世今生138
3.6.1 WebService简介138
3.6.2 Web服务的实现模式138
3.6.3 简单对象访问协议SOAP…140
3.6.4 调试工具soapUI145
3.7 Cookie详解148
3.7.1 Cookie的基本概念及设置…148
3.7.2 PHP和JavaScript对Cookie的操作149
3.7.3 Cookie存储机制及应用151
3.7.4 Cookie跨域与P3P、CORS协议153
3.7.5 本地存储localStorage156
3.8 Session详解158
3.8.1 Session的基本概念及设置158
3.8.2 Session的工作原理159
3.8.3 Session入库161
3.8.4 集群环境下的Session处理165
3.8.5 Cookie与Session问答166
3.9 本章小结167
第4章 RPC与服务治理的概念169
4.1 理解RPC170
4.1.1 RPC的原理171
4.1.2 RPC的组成元素172
4.2 HPROSE的介绍174
4.3 何为服务治理176
4.4 服务发现与服务注册177
4.4.1 Paxos协议178
4.4.2 ZooKeeper的介绍与安装…179
4.4.3 深入了解ZooKeeper180
4.4.4 ZooKeeper的应用183
4.4.5 etcd的介绍185
4.4.6 在PHP中使用etcd参与服务治理187
4.5 高性能网络库193
4.6 微服务概念简介194
4.7 本章小结196
第5章 PHP与数据库基础197
5.1 什么是PDO197
5.1.1 PDO预定义类198
5.1.2 如何使用PDO199
5.1.3 PDO参数绑定与预编译200
5.1.4 PDO事务处理205
5.1.5 PDO的效率问题206
5.2 数据库应用优化206
5.2.1 索引与性能分析206
5.2.2 服务器和配置的优化209
5.2.3 MySQL瓶颈及应对措施211
5.3 数据库设计212
5.3.1 范式与反范式212
5.3.2 数据库分区213
5.3.3 分表的应用215
5.4 MySQL的高级应用217
5.4.1 MySQL视图217
5.4.2 MySQL存储过程和事件调度220
5.4.3 用MySQL模拟消息队列223
5.4.4 SQL注入漏洞与防范226
5.4.5 MySQL全文搜索与Elasticsearch231
5.5 数据库锁与事务239
5.5.1 数据库锁239
5.5.2 数据库事务246
5.5.3 分布式事务254
5.6 数据库中间件257
5.6.1 中间件的介绍257
5.6.2 数据库中间件的原理与实现257
5.7 本章小结263
第6章 PHP框架实现原理264
6.1 MVC模式264
6.2 PHP框架Lonicera 0.1265
6.2.1 实现bootstrap267
6.2.2 路由器层的实现269
6.2.3 数据模型274
6.2.4 视图层实现282
6.2.5 对框架的初步改进286
6.3 Lonicera 0.2框架增强290
6.3.1 引入异常机制290
6.3.2 拦截器和插件的原理与实现293
6.3.3 Request增强与安全防御296
6.4 Lonicera框架0.3版实现297
6.4.1 composer的介绍与安装297
6.4.2 composer的类加载机制301
6.4.3 使用composer来重构框架303
6.4.4 基于composer的Model增强307
6.4.5 控制反转与依赖注入309
6.5 本章小结318
第7章 PHP扩展开发319
7.1 为什么要开发PHP扩展319
7.2 搭建PHP扩展框架319
7.2.1 PHP源代码目录320
7.2.2 ext_skel工具320
7.2.3 Windows平台环境配置320
7.2.4 Linux平台环境配置323
7.2.5 PHP的生命周期325
7.3 PHP内核中的变量327
7.3.1 PHP变量在内核中的存储方式327
7.3.2 PHP内核变量访问宏329
7.3.3 引用计数器与写时复制330
7.4 PHP内核中的HashTable分析…332
7.4.1 PHP内核HashTable的数据结构332
7.4.2 HashTable的代码实现337
7.5 Zend API详解与扩展编写341
7.5.1 什么是Zend引擎342
7.5.2 Zend引擎内存管理342
7.5.3 PHP扩展的架构342
7.5.4 接收用户传递的参数350
7.5.5 在PHP扩展中创建变量357
7.5.6 在PHP扩展中为变量赋值…360
7.5.7 错误和输出API371
7.5.8 运行时信息函数374
7.5.9 调用用户自定义函数374
7.5.10 PHP配置项376
7.5.11 创建常量的宏379
7.5.12 对象创建与操作380
7.6 唯一ID生成扩展实现383
7.6.1 snowflake算法384
7.6.2 自旋锁原理385
7.6.3 扩展的实现387
7.7 本章小结389
第8章 缓存详解390
8.1 认识缓存390
8.1.1 为什么使用缓存390
8.1.2 命中率391
8.1.3 缓存更新策略392
8.1.4 缓存最大数据量394
8.2 文件缓存394
8.2.1 文件缓存机制394
8.2.2 文件缓存开源产品Secache396
8.3 Opcode缓存398
8.4 客户端缓存404
8.4.1 客户端缓存规则405
8.4.2 HTTP协议中的缓存使用…405
8.4.3 HTTP缓存实例408
8.4.4 HTML 5中的Application Cache410
8.5 Web服务器缓存411
8.5.1 Apache缓存412
8.5.2 Nginx缓存412
8.6 本章小结414
第9章 Memcached使用与实践415
9.1 为什么要用Memcached415
9.2 Memcached的安装及使用415
9.2.1 安装Memcached服务器416
9.2.2 安装Memcached客户端417
9.2.3 使用memcache扩展访问Memcached服务器418
9.2.4 使用Memcached加速Web应用421
9.3 深入了解Memcached422
9.3.1 Memcached如何支持高并发422
9.3.2 使用Slab分配算法保存数据422
9.3.3 删除过期item426
9.3.4 使用LRU算法淘汰数据427
9.3.5 Memcached多线程模型428
9.4 Memcached分布式布置方案431
9.4.1 普通Hash分布431
9.4.2 一致性Hash分布432
9.4.3 一致性Hash分布算法实例434
9.5 本章小结436
第10章 Redis使用与实践437
10.1 Redis的安装及使用437
10.1.1 Redis安装步骤437
10.1.2 修改Redis配置文件438
10.1.3 运行Redis服务器439
10.1.4 key相关命令439
10.1.5 Redis支持的数据类型…441
10.1.6 Redis排序命令详解447
10.2 事务处理449
10.2.1 事务处理原理449
10.2.2 事务处理实现450
10.3 持久化452
10.3.1 内存快照452
10.3.2 日志追加452
10.4 主从同步453
10.4.1 Redis主从同步原理453
10.4.2 Slave端的工作流程454
10.4.3 Master端的工作流程457
10.5 Redis集群实战462
10.5.1 Redis集群搭建462
10.5.2 Redis集群原理467
10.6 扩展库phpredis安装及使用470
10.7 Redis应用实践470
10.7.1 使用消息队列发布微博…471
10.7.2 Redis替代文件存储Session472
10.8 深入了解Redis内核475
10.8.1 内存淘汰475
10.8.2 对象引用计数器477
10.8.3 自动关闭超时连接479
10.8.4 清除过期数据481
10.9 本章小结482
第11章 高性能网站架构方案483
11.1 如何优化网站响应时间483
11.1.1 吞吐率484
11.1.2 压力测试485
11.1.3 持久连接487
11.2 MySQL响应速度提高方案:HandlerSocket491
11.2.1 HandlerSocket工作原理491
11.2.2 HandlerSocket安装和配置491
11.2.3 PHP-HandlerSocket性能测试493
11.3 MySQL稳定性提高方案:主从复制494
11.3.1 主从复制工作原理494
11.3.2 主从复制配置495
11.3.3 连接主从服务器497
11.4 Web应用加速方案:Varnish…499
11.4.1 传统代理与反向代理499
11.4.2 Varnish安装和配置500
11.4.3 Varnish性能测试501
11.4.4 修改缓存规则503
11.4.5 监控Varnish运行状态…505
11.5 异步计算方案:Gearman506
11.5.1 Gearman工作原理506
11.5.2 安装Gearman和PHP扩展508
11.5.3 使用Gearman异步发送邮件508
11.6 本章小结510
第12章 代码调试和测试511
12.1 调试PHP代码511
12.1.1 PHP调试函数511
12.1.2 断点调试与变量跟踪工具Xdebug515
12.1.3 phpdbg的使用介绍518
12.1.4 使用strace来跟踪定位PHP程序520
12.2 前端调试525
12.2.1 Firebug调试API525
12.2.2 使用Firebug调试DOM结构527
12.2.3 使用Firebug进行远程调试528
12.3 日志管理530
12.3.1 PHP日志531
12.3.2 Apache/Nginx服务器日志531
12.3.3 MySQL日志534
12.4 代码性能测试技术537
12.4.1 时间点测试537
12.4.2 文件查看工具WinCache-Grind538
12.4.3 性能测试注意事项540
12.5 单元测试541
12.5.1 单元测试框架PHPUnit的安装541
12.5.2
标签
PHP