请您澄清一下,PHP解释器编译为每个命令的字节码,然后执行或首先读取所有命令,然后编译并执行它们?
答案 0 :(得分:0)
简短的回答是PHP需要解析整个文件才能干净地执行它,而不会出现语法错误。
操作码缓存(如果作为Zend扩展安装)可以通过替换原始函数来编译文件并仅在必要时执行它来缓存操作码。
如果您想了解整个故事,请从http://lxr.php.net/xref/PHP_5_6/Zend/zend_compile.h第675行开始探索。
它是全部或全无的原因是因为如果一个脚本有语法错误并且它已经被中途执行,那么就不可能撤消它可能造成的任何损害(例如,它无法撤消网络通信)。
它是基于每个文件的原因(而不是全部或全部)是为了优化,因为包含和要求可以是有条件的,更不用说自动加载。