2019年02月读书《PHP7内核剖析》
发布于:2019-3-13 8:58 作者:song100e 浏览:502 分类:人丑就要多读书PHP7 版本最大的特色在于其性能上的突破,比 PHP5 快了一倍。目前 PHP7 已经得到了广泛应用,越来越多的项目从 PHP5 迁移到了 PHP7。目前,关于PHP内核的资料非常有限,本书以当前流行的 PHP7 版本为基础,系统性地、尽可能详细地介绍PHP语言底层的实现,旨在帮助更多的开发者进一步理解PHP,参与到 PHP 的实现中,为未来 PHP 的发展贡献一份力量!全书内容主要包括 PHP 数据类型的实现、PHP 的编译及执行、PHP 内存的管理、函数及面向对象的实现、 PHP 基础语法的实现,以及 PHP 扩展的开发。
PHP7内核学习起步!
发布于:2019-2-15 17:48 作者:song100e 浏览:545 分类:内核剖析学习PHP7 版本的发布,Zend 引擎被再次重写,并以 Zend Engine 3.0 的身份亮相,使得 PHP 语言的性能得到大幅度提升,大量测试显示 PHP7 比 PHP5.6 在各种开源项目中有 60% 到 200% 的性能提升。学习和研究 PHP7 内核对于提升个人使用水平和内功很有必要。
一,源码下载及安装
$ wget http://php.net/distributions/php-7.0.12.tar.gz $ tar zxvf php-7.0.12.tar.gz $ cd php-7.0.12/ $ ./configure --prefix=/usr/local/php-7.0.12 --enable-debug --enable-fpm $ make && sudo make install
二,目录概览
以 php-7.0.12 为例,下面是每个目录的说明。
目录 | 说明 |
---|---|
TSRM | 线程相关安全的实现 |
Zend | PHP 解析器的核心实现 |
build | linux 下编译相关的目录 |
ext | PHP 的扩展 |
main | PHP 的主要代码 |
netware | 网络目录,socket 的定义与实现 |
pear | PHP 扩展及应用的代码仓库 |
sapi | PHP 的应用层接口 |
scripts | Linux 下的脚本目录 |
tests | 测试脚本目录 |
travis | 用于构建,非 PHP 特有目录 |
win32 | Windows 下编译 PHP 的相关脚本 |
三,核心目录
- sapi 全称 Server API,负责 PHP 对外提供服务规范,它定义了结构体 sapi_module_struct,该结构体定义了模式启动、关闭、激活、失效等多个钩子函数指针,每个模式将这些函数指针指向自己的函数。
- main 目录的作用是承接 SAPI 的请求,分析出要执行的脚本文件和参数,并对环境和配置进行初始化,比如初始化变量和常量、注册函数、解析配置文件、加载扩展等等。
- Zend 目录就是大家所熟知的 Zend 引擎,是 PHP 最核心的部分,主要负责 PHP 的语法实现、内存管理及脚本的编译运行环境等,它由编译器、执行器两部分组成。编译器负责将 PHP 代码进行词法、语法分析,并生成抽象语法树,然后进一步编译为 opcode,opcode 是 Zend 虚拟机可识别的指令。
- ext 是 extension 的缩写,它是扩展 PHP 内核功能的一种方式,分为 PHP 扩展 与 zend 扩展,都支持用户自定义开发,这两种都比较常见,PHP 扩展有 gd、json、date、array 等,而我们熟知的 opcache 就是 Zend 扩展。
-
TSRM 全称叫做 Thread Safe Resource Manager,也就是线程安全资源管理器。