php 解析流程
来源:互联网 发布:火星时代 知乎 编辑:程序博客网 时间:2024/06/18 02:05
我们都知道PHP脚本的执行过程,先是由Zend引擎将PHP源码编译为opcode序列,再由Zend VM去解释执行。一般编译的过程都是先进行词法分析、语法分析,然后才是编译。在经过语法分析之后,有一个抽象语法树(AbstractSyntax Tree或者缩写为AST)的概念,他算是语法分析的产出,之后的编译过程是编译器在AST基础上进行的。
但是PHP比较特殊,Zend引擎在语法分析之后直接产出了opcode,没有生成AST。这样做最大的好处是加快了编译过程,坏处则是丧失了一些自由性,难以优化以及导致编译程序逻辑复杂。具体PHP官网上有一篇wiki探讨了在PHP的编译过程中引入AST,当然实现起来难度肯定很大。
我们在平时一般不会接触到PHP的编译过程,但是AST却是个有用的东西,我们平时工作中很多工具里面都有AST,比如PHP_CodeSniffer、PHP_Depend、ZendStudio、PDT,需要对源码进行分析的场合,或多或少都需要AST的帮忙。
下面我们看下PHP7和php5编译流程,如图
0 0
- php 解析流程
- 简单解析PHP程序的运行流程
- PHP中break及continue两个流程控制指令解析
- php流程控制流程图解
- 用php制作文章发布管理系统流程解析(1)
- JBPM流程详细解析
- Gcc编译流程解析
- TCP通信流程解析
- socket 流程解析
- 计算机启动流程解析
- BootStrap运行流程解析
- Linux引导流程解析
- MTK图片解析流程
- Android待机流程解析
- Android开机流程解析
- Android 待机流程解析
- Android开机流程解析
- Android待机流程解析
- Hibernate关联映射之一对多、多对多映射
- 03-if.switch.do_while.for
- 递推基础
- Android开发秘籍学习笔记(八)
- linux下设置文件夹打开方式
- php 解析流程
- pl/sql中光标cursor的使用笔记
- fio
- 04-goto.void.extern.sizeof
- Windows下编译CAFFE,status == CUDNN_STATUS_SUCCESS,关闭CUDNN
- jar包Proguard混淆方法
- Fragment在不同情况下的生命周期
- MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法
- 我眼中的下拉刷新