前言
为什么要写这本书
工作了10多年,一直没有想过要写一本书。一年前,团队的张晶晶同学建议,我们能不能组织大家每天一起学习和讨论,这样也许会成长得更快。当时我感觉这是一个非常好的建议,但是也有隐隐的担忧,因为根据经验,多个人一起学习很难长期持续。但是看到晶晶同学渴望的眼神,我决定试一试,于是我建立了一个学习圈,发给团队的同事们,他们可以自愿参加,学习的时间是每天早上8:50~10:30,正好不影响工作,但是早晨要提前100分钟来公司,学习的内容是研读工作中使用的LNMP源码,首先学习和研究的就是PHP 7的源码。出乎意料,团队几乎所有的同事都参加了这个学习圈,包括实习生。
而这个学习圈一直坚持到现在,真是风雨无阻,大家已经习惯了按时一起讨论、研究,遇到问题时大家各自查找相关资料,顿悟难题时大家欣喜若狂。最令我欣喜的是,学习圈的同事们的快速成长,后来我们这个学习圈加入了滴滴公司的学习圈,得到了更多的资源支持。在学习过程中,我们每天都会记录日志,时间久了,发现得到了一个丰富的知识库,于是大家提议,写一本书,这样我们决定写一本PHP 7源码学习和研究的书,希望我们整理的资料能够帮助有意愿研究PHP 7源码的读者。
做了这个决定后,学习圈里的李长林、李志、黄桃、肖涛、王坤、季伟滨、朱栋和我一起编写了这本书,大家在工作之外,每天写书到深夜,周末从此是路人,经过半年的编写和校对,终于完成了这本书。我们希望给那些想要了解PHP 7底层实现的读者一些启发,帮助更多的人理解PHP 7的实现,也希望能够传播这种坚持学习的精神。
读者对象
❑ PHP工程师
❑ 对PHP内部实现感兴趣的读者
❑ 有C语言基础的读者
❑ 其他对PHP语言感兴趣的人
如何阅读本书
本书内容上分为四篇,共计14章内容。
第一篇(第1~2章)介绍PHP 7的概况和源码整体框架。其中,第1章主要介绍PHP的历史和PHP 7的新特性,以及研读源码的方法,第2章介绍PHP 7源码的整体框架,包括各目录的源码和功能。
第二篇(第3~6章)详细介绍PHP 7的变量实现。其中,第3章介绍基本变量zval的结构,第4章详细阐述字符串zend_string的实现,第5章介绍PHP 7中的核心结构HashTable的实现,也就是数组的实现,第6章介绍类和对象的实现。
第三篇(第7~11章)介绍PHP 7核心的实现。其中,第7章主要的内容是PHP 7的生命周期,第8章介绍生命周期的模块初始化阶段中配置文件的解析,第9章主要阐述内存管理的原理和实现,第10章介绍词法和语法分析的实现,第11章介绍核心Zend虚拟机的实现。
第四篇(第12~14章)主要介绍PHP 7中语法的实现。其中,第12章主要介绍基本语法的实现,第13章主要介绍函数的实现,第14章主要讲解扩展的实现。
其中,第3章、第4章、第5章和第14章为本书的重点章节,如果你没有充足的时间完成全书的阅读,可以选择性地进行重点章节的阅读。如果你是一位有着一定经验的资深人员,本书可能会是一本不错的案头书。然而,如果你是一名初学者,在开始本书阅读之前,建议先进行一些C语言和PHP的基础理论知识的学习。
勘误和支持
由于笔者的水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果你有更多的宝贵意见,欢迎加入我们,访问我们团队的技术网站https://segmentfault.com/u/php7internal进行专题讨论,我们会尽量在线上为读者提供满意的解答。同时,你也可以通过微博@PHP7内核,或者邮箱cltf@163.com联系到我们,期待能够得到你们的真挚反馈,在技术之路上互勉共进。
致谢
感谢卢红波、伍星两位工作导师的支持,前者是我在滴滴公司的领导,也是我管理和技术上的导师,后者是我职业生涯的启蒙导师,一直引领我前进到现在。
感谢Swoole团队韩天峰、王晶两位兄弟的指导和支持,他们在技术上给了我非常多的指点。
感谢李长林、李志、黄桃、肖涛、王坤、季伟滨、朱栋7位兄弟在学习和研究过程中的陪伴和合作,本书是几位兄弟共同合作的结晶。
特别致谢
最后,我要特别感谢我的太太梦云、儿子和女儿,为写作这本书,我牺牲了很多陪伴他们的时间,但也正因为有了他们的付出与支持,我才能坚持写下去。
同时,感谢我的父母、岳父岳母,特别是我的父母,不遗余力地帮助我们照顾儿女,有了他们的帮助和支持,我才有时间和精力去完成写作工作。
另外要感谢我团队的兄弟们,感谢他们的坚持,为他们的成长点赞!
最后要重点感谢高婧雅编辑,得益于她的耐心审稿,宝贵的建议以及用心的修改,才进一步提升了本书的质量。
谨以此书献给我最亲爱的家人,以及众多热爱PHP的朋友!
陈雷