本书的第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社区每一位充满活力的朋友,正是在和你们的交流中,使我学到了更多的东西,本书有不少内容来自于社区的智慧。
这是我和列旭松合著的第一本书,在这里尤其要感谢机械工业出版社的大力支持,特别是杨福川老师和张锡鹏老师,在一年多的时间里,是你们耐心地指导和认真编审才有了这本书的诞生。
还要感谢我的合作人列旭松的大力支持,正是他完成了本书最核心的章节,在后期与出版社和编辑沟通,并在稿件修改上付出了很多心血才保证书稿得以按时完成。
最后,还要感谢我的家人和朋友的支持。
陈文