学习
实践
活动
专区
工具
TVP
写文章

PHP底层分析之PHP编译编译分析

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大致的一个编译过程说明。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180120A0LA5U00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券