在读取过程中,PHP解释器是否会将每个命令编译成字节码?
请您澄清一下,PHP解释器将每个命令编译成字节码,然后执行,或者它首先读取所有命令,然后编译并执行它们 简单的回答是,PHP需要解析整个文件,以便干净地执行它,而不会出现语法错误 操作码缓存(如果作为Zend扩展名安装)可以通过替换原始函数来缓存操作码,从而编译文件并仅在必要时执行 如果您想了解整个故事,请从第675行开始探索 这是因为如果一个脚本有语法错误,并且已经执行了一半,那么就不可能撤销它可能造成的任何损害(例如,不可能撤销网络通信)在读取过程中,PHP解释器是否会将每个命令编译成字节码?,php,php-internals,Php,Php Internals,请您澄清一下,PHP解释器将每个命令编译成字节码,然后执行,或者它首先读取所有命令,然后编译并执行它们 简单的回答是,PHP需要解析整个文件,以便干净地执行它,而不会出现语法错误 操作码缓存(如果作为Zend扩展名安装)可以通过替换原始函数来缓存操作码,从而编译文件并仅在必要时执行 如果您想了解整个故事,请从第675行开始探索 这是因为如果一个脚本有语法错误,并且已经执行了一半,那么就不可能撤销它可能造成的任何损害(例如,不可能撤销网络通信) 尽管它是基于每个文件(不是全部或没有)的原因是为了优
尽管它是基于每个文件(不是全部或没有)的原因是为了优化,因为include和requires可以是有条件的,更不用说自动加载了。第二种情况是这样的,但是基于每个文件。字节码不能用直观的方法编译(如声明和理解的变量等)。编译代码的唯一方法是以编写代码的方式,然后尝试在编写代码时使用输入和进程执行代码,从头到尾都是以编写逻辑流的方式执行。如果使用操作码缓存,则每个文件只执行一次(除非您实际更改该文件并强制刷新操作码缓存)-请参阅