PHP代码执行原理

执行流程

在PHP 7中,源代码首先进行词法分析,将源代码切割为多个字符串单元,分割后的字符串称为 Token。而一个一个独立的 Token 是无法表达完整语义的,需经过语法分析阶段,将 Token 转换为抽象语法树 (简称 AST)。之后,抽象语法树被转换为机器指令执行在 PHP 中,这些指令称为 opcode (可以将其看待为CPU指令)。

  1. 词法分析(Lexical Analysis):源代码会被词法分析器解析,将其切割为多个字符串单元,也就是Token。每个Token代表一个语法上独立的部分,比如变量名、关键字、运算符等。

  2. 语法分析(Syntax Analysis):词法分析得到的Token会被语法分析器根据语法规则转换成抽象语法树(AST)。抽象语法树是代码的一种结构化表示,它反映了代码中的语法结构和关系。

  3. 生成opcode(Opcode Generation):抽象语法树会被进一步处理,转换为一系列的机器指令,称为opcode(operation code)。这些指令描述了具体的操作,如变量赋值、函数调用等。

  4. 执行opcode:生成的opcode会被PHP解释器逐条执行,这些指令会被翻译成底层的机器指令,由计算机执行。执行过程中,PHP解释器会根据opcode对变量进行操作、计算表达式、执行函数调用等。

opcode

opcodes是PHP虚拟机的指令集,类似Java的字节码,生成之后由Zend虚拟机执行。

opcode(operation code)是一种表示计算机指令的编码形式,它是计算机体系结构中的一部分。每个opcode都代表一条特定的机器指令,用于执行特定的操作,例如赋值、算术运算、逻辑运算、函数调用等。

在编程语言的解释器或虚拟机中,opcode被用于表示高级语言的指令,用于实现对高级语言的解释和执行。当高级语言的代码被翻译或解释成机器指令时,会转换为一系列的opcode。

在PHP中,opcode是PHP解释器针对PHP源代码生成的一系列指令,用于执行相应的操作。每个opcode对应一个具体的操作,如变量赋值、函数调用、条件判断等。PHP解释器会逐条执行这些opcode,从而实现对PHP代码的执行。

opcode的使用可以提高代码的执行效率,因为它是直接映射到底层的机器指令的,避免了再次解析和转换的开销。同时,opcode的存在也使得解释器或虚拟机能够对代码进行优化和控制,提供更好的性能和功能。

Opcache

开启Opcache可以将一些PHP的opcode指令缓存起来,从而提升PHP代码的执行性能。

Opcache(Opcode Cache)是PHP的一个扩展,它的作用是将PHP解释器在运行时生成的opcode指令缓存到内存中。当PHP代码再次执行时,可以直接使用缓存的opcode指令,避免了重复的解析和编译过程,提高了执行效率。

具体来说,开启Opcache后,当PHP解释器首次解析和编译PHP代码时,会将生成的opcode指令缓存到内存中。下次执行相同的PHP代码时,PHP解释器会直接使用缓存的opcode指令,避免了再次解析和编译的开销。

通过缓存opcode指令,Opcache可以大幅提升PHP代码的执行速度,特别是对于频繁执行的代码,效果更为明显。同时,Opcache还可以减少对文件系统的访问,减轻了I/O负载,提高了整体的系统性能。

posted @ 2019-07-27 20:28  GJH-  阅读(226)  评论(0)    收藏  举报