在 PHP 中,编译时和运行时是什么意思?

2022-08-30 20:09:25

PHP是一种解释型语言,而不是编译的。然而,我偶然发现一本书提到了在编译时PHP中发生的事情,PHP手册指出声明const发生在编译时。由于PHP没有编译,因此术语编译时与PHP的关系如何?

如果它只是意味着“当脚本被读取并翻译成解释器子例程时”,那么术语编译时和运行时之间有什么区别?


答案 1

PHP源代码经历了一个步骤,它被编译成PHP操作码。这个想法已经在各种平台上实现,尤其是在Java中。从理论上讲,通过拥有单独的“虚拟机”运行时来运行Opcode,语言设计人员能够将语言与可移植性问题分开。

您可以在手册中找到这些操作码的列表

在没有操作码缓存的典型PHP环境中,编译步骤和“运行时”步骤是无法区分的,但是,当您引入像APC或Zend Platform产品这样的“加速器/操作码缓存”时,您可以看到这些是过程中的单独步骤。

一旦脚本被编译成PHP Opscodes,它就可以从缓存运行,而不必从源代码重新编译,这就是这些加速器可以大大提高性能的地方。

如果你专注于PHP的“运行时”方面,你会看到PHP的“解释”性质,因为它需要一个运行时环境,与编译/链接的语言(如c / c ++)相比,它作为本机操作系统程序运行。

在PHP的情况下,php程序是本机操作系统程序(或本机作为本机操作系统Web服务器的模块)。

与Java在“Java虚拟机(JVM)”内部运行的方式不同,PHP的脚本在PHP中运行,因此不包含操作系统如何本机执行操作的细节。


答案 2

推荐