您的位置:首页 > 编程语言 > PHP开发

PHP的执行过程

2016-07-09 00:00 453 查看
摘要: PHP 现在不是解释型的语言,而是编译型的语言

1)传递给php程序需要的执行文件hello.php,php程序完成基本的准备工作后启动PHP及Zend引擎,加载注册的扩展模块。

2) 初始化完后读取脚本文件,Zend引擎对脚本进行此词法分析,语法分析,然后有Zend引擎编译成opcode码,最后Zend虚拟机执行opcode码。

PHP本身是用c实现的,因此最终调用的也都是c的函数,实际上,我们可以把php看做是一个c开发的软件。

详细的过程:

a.Scaning(Lexing):将PHP代码转换成语言片(Tokens).

b.Parsing:将Tokens转换成简单而有意义的表达式.

c.Compilation:将表达式编译成Opcode.

d.Execution:顺次执行Opcodes,从而实现PHP脚本的功能.

3)词法分析和语法分析

解释器的组成: a.读取源程序并处理语言结构。b.处理语言结构并生成目标程序.

上面提到的Lex:是词法分析器,也就是判断变量单词是否写错了,标签是否写错等等。

Yacc 是语法分析生成器: 语法分析也就是函数的结构,调用的方式 都是否正确等等。

4)opcode:简单来说 ,opcode是ZEND虚拟机中的指令,也就是php执行的最基本的单位.

5)PHP的结构体系:

a.zend引擎:

Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析 等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕zend实现。

b.Extensions扩展:

绕着zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的php中间层、富文本解析就是extension的典型应用)。

c.Sapi :

Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,sapi通过一系列钩子函数,使得php可以和外围交互数据,这是php非常优雅和成功的一个设计,通过sapi成功的将php本身和上层应用解耦隔离,php可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。

d.上层应用:

这就是我们平时编写的php程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: