php的架构体系与生命周期

php设计理念和特点

  • 多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响。当然,随着时代发展,PHP也早已支持多线程模型。
  • 弱类型语言:和C/C++、Java、C#等语言不同,PHP是一门弱类型语言。一个变量的类型并不是一开始就确定不变,运行中才会确定并可能发生隐式或显式的类型转换,这种机制的灵活性在web开发中非常方便、高效,具体会在后面PHP变量中详述。
  • 引擎(Zend)+组件(ext)的模式降低内部耦合。
  • 中间层(sapi)隔绝web: server和PHP。
  • 语法简单灵活,没有太多规范。缺点导致风格混杂,但再差的程序员也不会写出太离谱危害全局的程序。

php的核心架构体系

PHP的核心架构如下图:

如图,php从下而上四层结构体系:

  • Zend引擎:Zend整体用纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode处理,并实现相应的处理方法,实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。
  • Extensions:围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的PHP中间层、富文本解析就是extension的典型应用)。
  • Sapi:Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的一个设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
  • Application:这就是我们平时编写的PHP程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。

php生命周期

php的运行模式:

  • web模式: 当使用Apache或者别web服务器作为宿主时,当一个请求到来时,PHP会来支持完成这个请求。一般有:
    • 多进程(通常编译为apache的模块来处理PHP请求)
    • 多线程模式
  • CLI模式: 当我们在终端敲入php这个命令的时候,它使用的是CLI。

无论哪种模式,PHP工作原理都是一样的,作为一种Sapi运行。

Sapi

  • 单进程Sapi模型图
    单进程Sapi模型
  • php生命周期关键字
    php生命周期关键字
  • 1、MINI(module init 模块初始化):就是初始化类、常量、扩展等 PHP 所用到的资源
    • 启动 PHP 输出、初始化垃圾回收器
    • 启动 Zend 引擎、注册 Zend 核心扩展、Zend 标准常量
    • 解析 php.ini,映射 php.ini 相关配置
    • 注册静态、动态编译的扩展
    • 回调各扩展定义的 module starup 钩子函数
  • 2、RINIT(request init 请求初始化): PHP 初始化脚本执行的基本环境,SAPI 将控制权交给 PHP,激活 Zend 引擎,初始化执行器
  • 3、PHP 脚本执行: Zend 引擎接管控制权,将 PHP 脚本编译成 Opcodes,并顺序执行
    • PHP代码的执行所经过的流程。
    • PHP执行这段代码会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend)
1.Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)
2.Parsing, 将Tokens转换成简单而有意义的表达式
3.Compilation, 将表达式编译成Opocdes
4.Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。
  • 4、RSHUTDOWN (request shutdown 请求结束):PHP 脚本执行完之后进入请求结束阶段,PHP 启动清理程序,这个阶段,将 flush 输出内容,发送 http 响应内容,关闭 PHP 执行器
  • 5、MSHUTDOWN(module shutdown 模块关闭):这个阶段主要是进行资源的清理、php 各模块的关闭操作,同时,将回调各扩展的 module shutdown 钩子函数

参考博客:
laruence
歪麦

posted @ 2020-05-22 09:59  phper-liunian  阅读(410)  评论(0编辑  收藏  举报