一、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,以提升性能 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 如何使用php写一个网页 php如何运行
- 二氧化碳灭火器灭火原理
- 净水设备的原理
- 家用断电报警器原理
- 地暖的原理 水怎么流动
- 不可不知的“无器械”健身小原理
- 二氧化碳灭火器灭火的原理
- 倒立的特定原理和损伤预防
- 运动后肌肉酸痛原理及缓解疼痛的方法
- 运动小常识:肌肉痉挛的发病原理及处理方法