PHP底层机制

1、PHP设计理念及特色

多进程模型:因为PHP是多进程模型,不一样请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务形成影响,PHP也早支持多线程模型。
弱类型语言:一个变量的类型并非一开始就肯定不变的,运行中才会肯定并可能发生隐式或显示的类型转换。
引擎(Zend)+组件(ext)的模式下降内部耦合。
中间层(sapi)隔绝web server和PHP。
语法简单灵活,没有太多规范。缺点致使风格混杂。php

2、PHP的四层体系

图片描述

php从下到上,提供了一个四层的体系:
一、Zend引擎
Zend总体用纯c实现,是PHP的内核部分,主要功能:将PHP代码翻译成能够执行的opcode的处理以及实现相关的处理方法,实现了基础的数据结构(如:hashtable),内存分配机制以及管理,同时提供相关的API方法供外部去调用。
二、Extensions
围绕着Zend引擎,经过组件化的方式,提供各类基础服务,好比常见的php内置函数(array()等等),以及一系列的标准库,同时也能够自定义实现本身想要的扩展应用
三、Sapi
Sapi全称Server Application Programming Interface,也就是服务端应用编程接口,Sapi经过一系列钩子函数,使得PHP能够和外围交互数据,这是PHP很是优雅和成功的设计,经过sapi成功的将PHP自己和上层应用解耦隔离,PHP能够再也不考虑如何针对不一样应用进行兼容,而应用自己也能够针对本身的特色实现不一样的处理方式。
四、上层应用
平时编写的PHP程序,经过不一样的spai方式获得各类各样的应用模式,如何经过webserver实现web应用、在命令行下已脚本方式运行等等。web

3、Sapi

Sapi经过一些特殊的处理办法来使得外部的应用和PHP进行交换数据。常见的cli,fastcgi等等编程

4、PHP执行流程

PHP动态语言执行过程:api

拿到一段代码后,通过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令(opcodes),而后ZEND虚拟机顺次执行这些指令完成操做。PHP自己是用C实现的,所以最终调用的也是C的函数,实际上,咱们能够把PHP看作一个C开发的软件缓存

下图显示的就是PHP执行一段代码会通过的四个步骤。数据结构

四个步骤分别是:
1.Scanning(Lexing) ,将PHP代码转换为语言片断(Tokens)
2.Parsing, 将Tokens转换成简单而有意义的表达式
3.Compilation, 将表达式编译成Opcodes
4.Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。多线程

以上四个步骤简单来讲 首先经过对php的代码进行词法分析,而后获得了一个个,而后在parsing阶段,将以前获得的词中无用的词给去处掉,留下有意义的表达式,接着,将上一步的有意义的表达式,编译成opcodes,最后依次执行opcodes字段,从而实现PHP脚本。函数

备注:
如今有的Cache好比APC,可使得PHP缓存住Opcodes,这样,每次有请求来临的时候,就不须要重复执行前面3步,从而能大幅的提升PHP的执行速度。组件化

相关文章
相关标签/搜索