PHP给人的第一感觉它是一种脚本语言,同时它又可以跨平台,它是咋样完成跨平台的?作为脚本语言的PHP对其描述是
否够精确?我们接下来了解一下。
代码的大致执行过程如下图所示:
PHP代码执行图解
PHP的大致执行过程是这样的。PHP代码是不能直接运行的,首先需要经过词法分析器分析、语法分析,在经过编译器编
译成opcode 中间件,可能看到这里有的人会奇怪,PHP还能编译呀?其实严格来说,PHP是一种编译语言。编译成了opcode
一个中间码。类似JAVA中的class文件。在由zend 执行引擎上执行它的opcode ,从这点上来说,它是一个先编译后执行的语
言。
PHP底层分析之PHP编译编译分析
对于编译型语言如C语言,C++等,都是先编译成机器码(二进制)来运行的。JAVA语言,是把JAVA编译成class ,称
为bytecode 的字节码,在由JVM来运行的。JVM相当于在操作系统弄个层面又架了一层软件模拟的机器。为什么JAVA跨平台?
其实JAVA本身是不跨平台的,真正跨平台的是JVM,而JAVA运行在JVM上,所以我们通常认为JAVA可以跨平台。
PHP执行系统架构图
对于解释语言,是由解释器来解释执行的,典型的如linux shell,解释器逐行来执行命令。
PHP稍微有些特殊之处。虽然是一个脚本语言,但不是靠解释器解释的。而是zend 虚拟机屏蔽了操作系统的区别来实现跨
平台执行的。PHP代码编译成opcode,由zend 虚拟机来执行opcode。
对于JAVA语言而言,通过编译后的二进制文件,可以直接打包发布。但是PHP就不行了。PHP的opcode在PHP脚本一结
束,就清除了。下次执行重新生成opcode。那么鉴于这种情况,opcode 能否作为缓存来用呢?Php 本身不支持,但是apc、
xcache 等第三方工具 加速器实现了对opcode 的重复利用。
以上就是PHP大致的一个编译过程说明。
领取专属 10元无门槛券
私享最新 技术干货