PHP是编译型还是解释型?

基本上PHP被解释,但是PHP被编译成中间字节码,然后由运行时Zend引擎解释。

PHP编译器的工作是解析PHP代码并将其转换为适合运行时引擎的形式。其任务包括:

  • 忽略评论
  • 解析变量、函数名等并创建符号表
  • 构造程序的抽象语法树
  • 编译成字节码
    根据您的PHP设置,此步骤通常只执行一次,即脚本第一次被调用时。编译器输出被缓存以加快后续使用的访问速度。但是,如果修改了脚本,则再次执行编译步骤。

PHP解释器:

  • 逐行遍历字节码并执行它
  • 处理运行时异常

运行时引擎在调用脚本时遍历AST和字节码。符号表用于存储变量的值并为函数提供字节码地址。

编译后的代码可以由计算机的CPU直接执行。也就是说,可执行代码是用CPU的本机语言指定的

解释语言的代码必须在运行时从任何格式转换成CPU机器指令。这个翻译是由翻译人员完成的。

不能说一种语言是被解释或编译的,因为解释和编译都是该特定语言实现的属性,而不是该语言本身的属性。因此,任何语言都可以被编译或解释——这只是取决于您使用的特定实现的功能。

最广泛使用的PHP实现由Zend引擎提供支持,简称PHP。Zend引擎将PHP源代码编译成它可以执行的格式,因此Zend引擎充当解释器。

这种编译成字节码并在运行时解释它的过程对于在某种虚拟运行时机器(包括Perl、Java、Ruby、Smalltalk等)上运行的语言来说是很典型的。

PHP代码是如何执行的
如何调试和分析PHP OPcache问题