PHP7内核剖析
  • 推荐6
  • 收藏7
  • 浏览2.5K

PHP7内核剖析

秦朋 (作者) 

  • 书  号:978-7-121-32810-7
  • 出版日期:2017-11-01
  • 页  数:492
  • 开  本:16(185*235)
  • 出版状态:上市销售
纸质版 ¥89.00
PHP作为最流行的语言之一,自第一个版本发布至今的二十几年里经历了多次重大改进,PHP7版本最大的特色在于其性能上的突破,比PHP5快了一倍。目前PHP7已经得到了广泛应用,越来越多的项目从PHP5迁移到了PHP7。目前,关于PHP内核的资料非常有限,本书以当前最为流行的PHP7版本为基础,系统性地、尽可能详细地介绍PHP语言底层的实现,旨在帮助更多的开发者进一步理解PHP,参与到PHP的实现中,为未来PHP的发展贡献一份力量!全书内容主要包括PHP数据类型的实现、PHP的编译及执行、PHP内存的管理、函数及面向对象的实现、PHP基础语法的实现,以及PHP扩展的开发。
本书适用于有一定C语言基础的PHP高级工程师,或者想了解PHP7的内部实现、扩展开发的工程师。
基于PHP7版本,围绕PHP的SAPI、数据类型、内存管理、编译与执行、函数、类及基础语法等的实现,深刻揭示PHP底层Zend引擎的实现原理
秦朋,高级开发工程师,曾就职于360、搜狗等公司,有多年高并发、分布式服务开发经验,尤其熟悉PHP扩展及其底层的实现机制,对PHP有深入的理解。目前就职于滴滴引擎技术部,从事分单架构方面的工作。
前  言


为什么要写这本书
PHP作为最流行的语言之一,自第一个版本发布至今的二十几年里经历了多次重大的改进,尤其是PHP7版本的发布,其最大的亮点在于性能上的提升,比PHP5快了一倍。随着PHP7的不断普及,越来越多的项目从PHP5迁移到了PHP7,毫无疑问,PHP7将成为PHP历史上里程碑式的一个版本。我是在大学时代接触到的PHP,初次相识就被其简洁、易用的语法所吸引了。在工作后的几年里,我一直使用PHP作为主要的开发语言。当然,除了PHP,我也使用过很多其他语言,比如C、C++、Java、Golang、Python等,不同的语言有各自的特点、优势,让我印象最深的、也让我最喜欢的有C、Golang、PHP。
 C
这是我评价最高的一门语言,其强大的操控能力、简洁的语法、易于理解的处理方式无一不让我折服。编程语言本身只是控制计算机的一种工具,然而很多高级语言过度隔离了人与计算机间的联系,使得编程者并不理解计算机实际的工作机制,只能被编程语言限定在固定范围内,而C语言在这一点上做得恰到好处,其没有过度干预我们对计算机的操控,允许我们自由地控制内存、CPU。当然,C语言也有很多不方便的地方,过于简单的接口使得很多操作不得不通过编写大量的代码来实现。
 Golang
并发是我对其最大的印象,我们可以用更容易理解的方式来实现并发,但是它的内存控制没有C语言那么方便、灵活。
 PHP
PHP的底层是C语言实现的,这也使得它继承了很多C语言的基因,PHP的简洁、易用、学习成本低等特点成就了它今天的地位。
PHP的高度封装性与弱类型的特点使得很多操作极其简便,例如JSON的解析如果在Golang中完成,则需要定义一系列的结构体,然后才能完成解析,而在PHP中通过一行代码就可以完成。正是PHP底层的强大才得以实现如此简便的操作,那么强大的PHP背后到底是什么样子的呢?我想很多PHPer都有过这个疑问。然而让人感到沮丧的是,关于PHP内核的资料非常有限,已有的这些资料也不全面、系统,多数局限在理论介绍的层面上。后来我就直接去读PHP的源码,渐渐地发现,以前很多不理解的问题都在源码中找到了答案。本书主要的出发点是给那些想要了解PHP底层实现的读者一些启发,帮助更多的人理解PHP的实现,甚至能够参与到PHP的开发中,为未来PHP的发展贡献一份力量!
本书适合的对象
 有一定C语言基础的读者。
 想要理解PHP内部实现的读者。
 PHP高级工程师。
 对虚拟机实现感兴趣的读者。
本书不适合作为PHP的入门教程。书中对于基础性的、概念性的东西介绍很少,重点是源码解析。
本书的结构
本书总共分为10章,章节之间存在一定的衔接,建议按照先后顺序阅读。其中第3~第9章为Zend引擎相关的内容,也是本书的核心章节。
第1章介绍PHP的基础内容。本章主要介绍PHP的历史发展、PHP7的主要变化,重点讲解PHP的构成部分与生命周期的几个阶段。
第2章介绍SAPI。本章选取了PHP三种常见的应用场景,介绍三个不同SAPI的实现:Cli、Fpm、Embed。SAPI是PHP的接入层,如果只想了解Zend引擎的内容,那么可以跳过本章。
第3章介绍数据类型。本章主要介绍PHP中变量的基础结构zval,以及不同类型的结构,它们是PHP中最基础的、使用最频繁的数据结构,通过本章的内容你将了解PHP中变量的内部实现。
第4章介绍内存管理。本章主要介绍PHP变量自动回收机制的实现,以及PHP底层内存池、线程安全相关的实现。通过本章的内容,你将了解变量的内存是如何进行管理的,为什么PHP中的变量不需要手动申请释放。其中内存池的实现比较独立,它的实现与tcmalloc类似;线程安全只在多线程环境下使用,常见的Fpm、Cli模式不会用到,本书其他章节介绍的内容都是非线程安全的。
第5章介绍PHP的编译与执行。本章介绍PHP代码从编译到执行的整个过程,这也是Zend引擎的核心实现。通过对本章的学习,你将了解PHP代码是如何被Zend引擎识别、执行的。
第6章介绍函数的实现。本章介绍PHP中函数的实现,这也是Zend引擎的核心部分,本章的内容与第5章相关,介绍函数的编译与执行。
第7章介绍面向对象。本章介绍面向对象相关的实现,主要包括类、对象的内部实现。
第8章介绍命名空间。本章介绍PHP中命名空间的实现,这部分内容比较简单,命名空间只涉及编译阶段。
第9章介绍基础语法的实现。本章主要介绍PHP中基础语法的实现,比如条件分支、循环结构、中断跳转、静态变量、常量、全局变量、文件加载等,这些语法涉及PHP的编译、执行,它们是PHP语言的基础组成部分。通过对本章的学习,你可以更全面地掌握PHP语言的实现。
第10章介绍扩展开发。本章的内容偏向应用性,主要介绍扩展开发中常用的一些接口、宏。
勘误与支持
因个人水平有限,以及时间比较仓促,书中难免有不足之处,还望读者批评指正。如果你对本书有比较好的建议或对书中内容有所疑惑,可与我联系。
Email:pangudashu@gmail.com;QQ群:103330909
致谢
首先感谢PHP7的主要开发者鸟哥与PHP社区的其他开发者,正是他们的智慧造就了PHP,期待未来PHP能够有更加广阔的发展空间。在这里尤其要感谢Swoole的创始人韩天峰老师,本项目有幸得到韩老师的推荐,得到了众多人的关注。另外要单独感谢陈晓猛编辑,在他耐心地指导、审稿、修改工作下,最终才有了本书的诞生。

秦朋

目录

第1章 PHP基础架构
1.1 简介
1.2 安装及调试
1.3 PHP7的变化
1.4 PHP的构成
1.5 生命周期
1.6 小结
第2章 SAPI
2.1 Cli
2.1.1 执行流程
2.1.2 内置Web服务器
2.2 Fpm
2.2.1 基本实现
2.2.2 Fpm的初始化
2.2.3 worker——请求处理
2.2.4 master——进程管理
2.3 Embed
2.3.1 实现
2.3.2 使用
2.4 小结
第3章 数据类型
3.1 变量
3.1.1 变量类型
3.1.2 内部实现
3.2 字符串
3.3 数组
3.3.1 基本实现
3.3.2 散列函数
3.3.3 数组的初始化
3.3.4 插入
3.3.5 哈希冲突
3.3.6 查找
3.3.7 扩容
3.4 引用
3.5 类型转换
3.5.1 转换为NULL
3.5.2 转换为布尔型
3.5.3 转换为整型
3.5.4 转换为浮点型
3.5.5 转换为字符串
3.5.6 转换为数组
3.5.7 转换为对象
3.6 小结
第4章 内存管理
4.1 变量的自动GC机制
4.1.1 引用计数
4.1.2 写时复制
4.1.3 回收时机
4.2 垃圾回收
4.2.1 回收算法
4.2.2 具体实现
4.3 内存池
4.3.1 内存池的初始化
4.3.2 内存分配
4.3.3 系统内存分配
4.3.4 内存释放
4.4 线程安全
4.4.1 TSRM的基本实现
4.4.2 线程私有数据
4.4.3 线程局部存储
4.5 小结
第5章 PHP的编译与执行
5.1 语言的编译与执行
5.1.1 编译型语言
5.1.2 解释型语言
5.2 Zend虚拟机
5.2.1 opline指令
5.2.2 zend_op_array
5.2.3 zend_execute_data
5.2.4 zend_executor_globals
5.3 PHP的编译
5.3.1 词法、语法解析
5.3.2 抽象语法树编译
5.3.3 pass_two()
5.4 PHP的执行
5.4.1 handler的定义
5.4.2 调度方式
5.4.3 执行流程
5.4.4 全局execute_data和
opline
5.5 运行时缓存
5.6 Opcache
5.6.1 opcode优化
5.6.2 JIT
5.7 小结
第6章 函数
6.1 用户自定义函数
6.1.1 语法解析
6.1.2 抽象语法树的编译
6.2 内部函数
6.3 函数的调用
6.4 函数的执行
6.5 小结
第7章 面向对象
7.1 类
7.1.1 常量
7.1.2 成员属性
7.1.3 成员方法
7.1.4 类的编译
7.1.5 内部类
7.1.6 类的自动加载
7.2 对象
7.2.1 对象的创建
7.2.2 非静态成员属性的读写
7.2.3 对象的复制
7.2.4 对象的比较
7.2.5 对象的销毁
7.3 继承
7.3.1 常量的继承
7.3.2 成员属性的继承
7.3.3 成员方法的继承
7.4 动态属性
7.5 魔术方法
7.6 小结
第8章 命名空间
8.1 概述
8.2 命名空间的定义
8.3 命名空间的使用
8.3.1 use导入
8.3.2 动态用法
8.4 小结
第9章 PHP基础语法的实现
9.1 静态变量
9.2 常量
9.2.1 const
9.2.2 define()
9.3 全局变量
9.3.1 全局变量符号表
9.3.2 全局变量的访问
9.3.3 全局变量的销毁
9.3.4 超全局变量
9.4 分支结构
9.4.1 if
9.4.2 switch
9.5 循环结构
9.5.1 while
9.5.2 do while
9.5.3 for
9.5.4 foreach
9.6 中断及跳转
9.6.1 break/continue
9.6.2 goto
9.7 include/require
9.8 异常处理
9.8.1 PHP中的try catch
9.8.2 内核中的异常处理
9.9 break/continue LABEL语法的
实现
9.10 小结
第10章 扩展开发
10.1 扩展的内部实现
10.2 扩展的构成及编译
10.2.1 脚本工具
10.2.2 扩展的编写步骤
10.2.3 config.m4
10.3 钩子函数
10.3.1 模块初始化阶段
10.3.2 请求初始化阶段
10.3.3 请求结束阶段
10.3.4 post deactivate阶段
10.3.5 模块关闭阶段
10.4 全局资源
10.5 ini配置
10.6 函数
10.6.1 内部函数注册
10.6.2 函数参数解析
10.6.3 引用传参
10.6.4 函数返回值
10.6.5 函数调用
10.7 Zval的操作
10.7.1 zval的创建及获取
10.7.2 变量复制
10.7.3 引用计数
10.7.4 字符串操作
10.7.5 数组操作
10.8 常量
10.9 面向对象
10.9.1 内部类注册
10.9.2 成员属性
10.9.3 成员方法
10.9.4 常量
10.9.5 类的实例化
10.10 资源
10.11 小结

本书勘误

印次
  • 页码:第10章  •  行数:整章  •  印次: 1

    箭头改为->

    陈晓猛 提交于 2017/12/13 10:40:41
    陈晓猛 确认于 2017/12/13 10:40:52
  • 页码:2  •  行数:27  •  印次: 1

    增加一行代码 $ make && make install

    陈晓猛 提交于 2017/12/13 10:27:29
    陈晓猛 确认于 2017/12/13 10:41:54
  • 页码:2  •  行数:-7  •  印次: 1

    增加一行代码 $ make && make install

    陈晓猛 提交于 2017/12/13 10:28:44
    陈晓猛 确认于 2017/12/13 10:29:59
  • 页码:50  •  行数:5  •  印次: 1

    【nTableSize】改为【nTableMask】

    陈晓猛 提交于 2017/12/13 10:31:11
    陈晓猛 确认于 2017/12/13 10:31:47
  • 页码:50  •  行数:6  •  印次: 1

    [-1, nTableMask] 改为 [nTableMask, -1]

    振翅飞翔 提交于 2018/4/16 1:33:14
    陈晓猛 确认于 2018/4/16 14:47:06

读者评论

  • 那就有奇怪了。书上说就在这儿下载。。。

    戴政国发表于 2017/12/29 11:01:36
  • 那就有奇怪了。书上说就在这儿下载。。。

    戴政国发表于 2017/12/29 11:01:30
  • 在下载资源处没有源代码呀。。

    戴政国发表于 2017/12/29 8:46:17
  • 在下载资源处没有源代码呀。。

    戴政国发表于 2017/12/29 8:45:50
    • 本书没有提供源代码下载

      陈晓猛发表于 2017/12/29 9:16:07

相关图书

看漫画学Python:有趣、有料、好玩、好用(全彩修订版)

关东升 著 赵大羽 绘 (作者)

ython是一门既简单又强大的编程语言,被广泛应用于数据分析、大数据、网络爬虫、自动化运维、科学计算和人工智能等领域。Python也越来越重要,成为国家计算机等...

 

看漫画学Python 2:有趣、有料、好玩、好用(全彩进阶版)

关东升 ,赵大羽 (作者)

本书是《看漫画学Python》的进阶版本,继续秉承有趣、有料、好玩、好用的理念,并继续采用《看漫画学Python》一书中3个不同的漫画人物角色,通过这3个角色之...

 

趣玩Python:自动化办公真简单(双色+视频版)

本书以数据收集→数据清洗→数据分析→数据可视化→根据数据可视化结果(即图表)做决策为脉络,介绍Python在实际工作场景中的应用,侧重于用Python解决工作中...

 

软件交付通识

董越 (作者)

软件交付过程是指在编程序改代码之后,直到将软件发布给用户使用之前的一系列活动,如提交、集成、构建、部署、测试等。本书作为通识类图书,对软件交付过程的各个方面进行...

¥89.00

分布式系统与一致性

陈东明 (作者)

一致性是非常重要的分布式技术。众所周知,分布式系统有很多特性,如可用性、可靠性等,这些特性多多少少会与一致性产生关系,受到一致性的影响。要全面研究、掌握分布式技...

¥79.00

人人都是产品经理(案例版):淘宝十年产品事

陶英琪 (作者)

做产品经理需要不断成长。然而回顾漫长的产品发展史,我们总会发现:有太多犯过的错误在反复出现,每一次都会有人掉入同样的“坑”。大量看似充满新意的点子、“前无古人”...

¥69.00