php7执行过程顺序,PHP7 代码执行过程

40596c7385a13366b8e5bc1a9b3ff29a.png

PHP是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。

PHP代码=> Token =>抽象语法树=>

Opcodes =>执行

各个步骤内容如下:

源代码通过词法分析得到Token

Token是PHP代码被切割成的有意义的标识。PHP7一共有137种Token,在zend_language_parser.h文件中做了定义。

基于语法分析器将Token转换成抽象语法树(AST)

Token就是一个个的词块,但是单独的词块不能表达完整的语义,还需要借助一定的规则进行组织串联。所以就需要语法分析器根据语法匹配Token,将Token进行串联。语法分析器串联完Token后的产物就是抽象语法树(AST,Abstract Syntax Tree)。

AST是PHP7版本的新特性,之前版本的PHP代码的执行过程中是没有生成AST这一步的。它的作用主要是实现了PHP编译器和解释器的解耦,提升了可维护性。

将语法树转换成Opcode

需要将语法树转换成Opcode,才能被引擎直接执行。

执行Opcodes

opcodes是opcode的集合形式,是PHP执行过程中的中间代码。PHP工程优化措施中有一个比较常见的“开启opcache”,指的技术这里将opcodes进行缓存。通过省去从源码到opcode的阶段,引擎直接执行缓存好的opacode,以提升性能。

PHP7内核架构

zend引擎

词法/语法分析、AST编译和opcodes的执行均在Zend引擎中实现。此外,PHP的变量设计、内存管理、进程管理等也在引擎层实现。

PHP层

zend引擎为PHP提供基础能力,而来自外部的交互则需要通过PHP层来处理。

SAPI

server API的缩写,其中包含了场景的cli SAPI和fpm SAPI。只要遵守定义好的SAPI协议,外部模块便可与PHP完成交互。

扩展部分

依据zend引擎提供的核心能力和接口规范,可以进行开发扩展。

PHP 7源码结构

php 7的源码主要目录有:sapi、Zend、main、ext和TSRM这几个。

sapi目录

sapi目录是对输入和输出层的抽象,是PHP提供对外服务的规范。

几种常用的SAPI:

1)apache2handler: Apache扩展,编译后生成动态链接库,配置到Apache下。当有http请求到Apache时,根据配置会调用此动态链接库来执行PHP代码,完成与PHP的交互。

2)cgi-fcgi:编译后生成支持CGI协议的可执行程序,webserver(如NGINX)通过CGI协议把请求传给CGI进程,CGI进程根据请求执行相应代码后将执行结果返回给webserver。

3)fpm-fcgi: fpm是FastCGI进程管理器。以NGINX服务器为例,当有请求发送到NGINX服务器,NGINX按照FastCGI协议把请求交给php-fpm进程处理。

4)cli: PHP的命令行交互接口

Zend目录

Zend目录是PHP的核心代码。PHP中的内存管理,垃圾回收、进程管理、变量、数组实现等均在该目录的源码里。

main目录

main目录是SAPI层和Zend层的黏合剂。Zend层实现了PHP脚本的编译和执行,sapi层实现了输入和输出的抽象,main目录则在它们中间起着承上启下的作用。承上,解析SAPI的请求,分析要执行的脚本文件和参数;启下,调用zend引擎之前,完成必要的模块初始化等工作。

ext目录

ext是PHP扩展相关的目录,常用的array、str、pdo等系列函数都在这里定义。

TSRM

TSRM(Thread Safe Resource Manager)——线程安全资源管理器,是用来保证资源共享的安全。

参考资料

《PHP7底层设计与源码实现》

合肥达内PHP培训“互联网大牛”软件工程师课程为有志成为互联网软件“行业新贵”的学员精心打造,从第一天起就力求知识的“新”和“深”。不但及时更新互联网知识(如:Yii框架、HTML5、NoSQL、Bootstrap、LessCSS、Minify等),同时对基础知识要达到足够的深度(如:PHP核心函数库行业内全,MySQL行业内内容深入)。

每年有10W人选择达内,选择的人多,自然是好培训!我们的课程专为零基础打造,是学PHP必经之路!如果你想在2018年成为一名高薪PHP工程师,那就从参加合肥达内免费训练营开始吧!在线留言客服可免费试听,试听过后,学不学,你说了算。

*版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费!怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值