前言
由于php简单的语法以及丰富的数据类型和数据操作函数, 使我们可以快速上手并开发应用, 尤其随着php7, php8在数据结构和运行时方面大刀阔斧的改革, 社区优秀的扩展如swoole的持续迭代优化, 使得php一直随着时代的进步而进步。个人认为php受众广泛的原因之一是因为提供了”数组”这个可靠, 而且非常易用的数据结构, php的数组实现了数组, hashmap的功能, 同时也保持了hash的有序遍历, 高效查找等特性, 是一个非常优秀的数据容器, 一起学习其中的原理和设计哲学可以带给我们很多启发。
php源码结构
本次实践源码版本为: 7.3.22, 不同小版本可能会有些许差异, 如当前版本op_code定义了编号: 0-198的集合, 8.0版本的定义了0-201的操作集合, php的扩容负载因子变化等。
|目录|说明|
|-|-|-|
| build |主要存放和编译相关的文件, 如构建脚本和环境检查等|
| ext |官方扩展目录, 包含多数php扩展, 如mysql, redis等, 其中比较重要的子目录: standard 存放php标准数据操作函数实现等|
| main |主要实现PHP的基本设施,这里和Zend引擎不一样,Zend引擎主要实现语言最核心的语言运行环境|
| Zend |zend引擎核心实现目录, 包含php核心词法解析, OPCODE定义, hashtable实现和丰富的api|
| sapi |应用服务器抽象代码层, 定义和实现不同模式的接入规范交互接口|
| TSRM |线程安全资源管理器相关实现|
| tests |测试用户集合, 包含全面的php测试用例|
| win32 |和windows平台接口的交互相关实现|
