.php如何运行(php运行原理)

80酷酷网    80kuku.com

一、php7的执行原理概述

我们了解到的高级编程语言大体分为两种:一种是编译型语言,一种是解释型语言,像c、go语言等就是编译型语言,在应用程序执行之前,就将程序代码翻译成汇编语言,然后根据软硬件环境编译成目标文件。而解释型语言,在程序运行时才被翻译成机器语言,执行一次解释一次,所以效率相对较低。

在php7中,源代码首先进行词法分析,将代码切分为多个字符串单元,分割后的字符串叫做token,独立的token是无法表达语义的,需要经过语法分析,将token转换成抽象语法树(AST)。之后,抽象语法树在转换为机器指令执行,这些指令在php中成为opcode。如常见的 echo 对应的opcode指令就是ZEND_ECHO。

(1)token

token是php代码被切割成的有意义的标识,通过token_get_all()函数查看到token的值转换成一个二维数组,每个成员数组的第一个值为token对应的枚举值,第二个值为token对应的字符串内容,第三个值为代码对应的行号。

(2)AST

token是一个个单独的“词块”,需要借助规则来串联,串联后的产物就是php7新增的AST,实现了php编译器和解释器的解耦,有效提升了可维护性。

(3)opcodes

AST扮演了源码到中间代码的临时存储介质的角色,还需要转换成opcode才能被引擎执行,opcode是单独指令,opcodes是opcode的集合形式,是php执行过程中的中间代码,类似java的字节码,opcode生成之后由虚拟机执行。

我们知道,php工程优化中有个比较常见的开启“开启opcache”。指的就是opcodes缓存,通过省去了从源码到opcode的阶段,引擎直接执行缓存的opcode,以提升性能。

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: