Mac*_*ity 20
PHP在运行文件时随时进行两次传递(默认情况下).
Pass#1解析文件并构建所谓的操作(或机器)代码.这是您的计算机实际运行的原始二进制格式,它不是人类可读的.在其他语言(如C++等)中,这称为编译.您可以使用Opcache等各种系统缓存此步骤,这样可以节省每次编译时的开销.
语法错误来自执行的这一部分.
Pass#2执行Pass#1的操作代码.这就是通常所说的"运行时",因为您的计算机实际上正在执行指令.
运行时错误(如耗尽内存,异常终止等)来自此级别.然而,这些比语法错误要少得多.
lon*_*day 13
PHP文件分两个阶段运行.
首先,解析PHP文件.此时,来自Web浏览器(或来自任何其他来源)的数据完全无关紧要.所有这一切都是将PHP文件分解为其组成部分并构建代码结构.
然后使用您提供的数据执行代码.
这种分离使代码更快.当您拥有像APC或OPcache这样的操作码缓存时尤其如此,因为在后续情况下可以跳过第一步,因为代码的结构完全相同.
您遇到差异的时间主要是错误.例如,此代码将在编译阶段导致错误:
function class() {
// some code
}
Run Code Online (Sandbox Code Playgroud)
这是不可能的,因为它class是一个保留字.PHP可以在编译代码时选择它:它总是会失败.它永远不会工作.
但是,此代码可能会在运行时导致错误:
echo $_GET['nonExistingKey'];
Run Code Online (Sandbox Code Playgroud)
由于密钥nonExistingKey不存在,因此无法检索,因此会导致错误.但是,PHP最初编译时无法决定这一点,只有当它与您提供的数据一起运行时才能确定.
| 归档时间: |
|
| 查看次数: |
4442 次 |
| 最近记录: |