我们学习了解了这么多关于PHP的知识,不知道你们对他的构成以生命周期是否已经完全掌握了呢,如果没有,那就跟随本篇文章一起继续学习吧
一、PHP开源源代码下载地址:
https://github.com/php/php-src.git
二、PHP的构成
1、目录结构
2、目录分析
(1)sapi目录是PHP的应用接口层。
(2)main为php的主要代码,主要是输入/输出、Web通信、PHP框架的初始化操作等,比如fastcgi协议的解析、扩展的加载、PHP配置的解析等工作都是在这里完成的。
(3本2文来*源gao($daima.com搞@代@#码(网搞gaodaima代码)Zend目录是PHP解析器的主要实现,即ZendVM,它是PHP语言的核心实现,PHP代码的解释、执行都是由Zend完成的。
(4)ext目录是PHP的扩展目录,比如php的curl扩展,gd库扩展、pdo扩展等都是在这里。
(5)TSRM目录为线程安全相关的实现。
(6)PHP各组成部分之间关系图:
3、SAPI
(1)PHP是一个脚本解析器,提供脚本的解析与执行。它的输入是普通的文本,然后由PHP解析器按照预先定义好的语法规则进行解析执行。我们可以在不同环境中应用这个解析器,比如命令行下、Web环境下、嵌入其他应用中使用。为此,PHP提供了一个SAPI层以适配不同的应用环境,SAPI可以认为是PHP的宿主环境。
(2)SAPI也是整个PHP框架最外层的一部分,它主要负责PHP框架的初始化工作。SAPI代码位于PHP源码的 /sapi 目录下,经常用到的两个SAPI是Cli和Fpm。
4、ZendVM
(1)ZendVM是一个虚拟的计算机,它介于PHP应用和实际计算机中间,我们编写的PHP代码就是被它解释执行的。ZendVM是PHP语言的核心实现,他主要由两部分组成:编译器和执行器。
(2)编译器负责将PHP解释为执行器可识别的指令,执行器负责执行编译器解释出的指令。
(3)ZendVM的角色等同于Java中的JVM,它们都是抽象出的虚拟计算机。
5、Extension
(1)扩展是PHP内核提供的一套用于扩充PHP功能的一种方式,PHP社区中有丰富的扩展可供使用,这些扩展为PHP提供了大量实用的功能,PHP中很多操作的函数都是通过扩展提供的。
(2)通过扩展,我们可以使用C/C++实现更强大的功能和更高的性能。扩展分为PHP扩展和Zend扩展,PHP扩展比较常见,而Zend扩展主要应用于ZendVM,我们所熟知的Opcache就是Zend扩展。
三、PHP生命周期
1、PHP的整个生命周期被划分为以下几个阶段:
(1)模块初始化阶段(module startup)
(2)请求初始化阶段(request startup)
(3)脚本执行阶段(execute sccript)
(4)请求关闭阶段(request shutdown)
(5)模块关闭阶段(module shutdown)
注:根据不同SAPI的实现,各阶段的执行情况会有一些差异,比如命令行模式下,每次执行一个脚本都会完成的经历这些阶段。而FastCgi模式下则在启动时执行一次模块初始化,然后各个请求只经历请求初始化,脚本执行,请求关闭几个阶段,在SAPI关闭时,才经历模块关闭阶段。