PHP的构成及工作原理

PHP的设计理念及特点

  • 多进程模型

    由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,随着时代发展,PHP也早已支持多线程模型。

  • 弱类型语言

    和C/C++、Java、C#等语言不同,PHP是一门弱类型语言。一个变量的类型并不是一开始就确定不变,运行中才会确定并可能发生隐式或显式的类型转换,这种机制的灵活性在web开发中非常方便、高效。

  • 引擎(Zend)+组件(ext)的模式降低内部耦合。

  • 中间层(sapi)隔绝web server和PHP。

  • 语法简单灵活,没有太多规范。缺点导致风格混杂,但再差的程序员也不会写出太离谱危害全局的程序。

PHP的构成

PHP源码主要目录有下列几个:

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

    常用的两个SAPI是Cli和Fpm,另外还有Embed,这三种是比较典型的SAPI,除此还有litespeed和apache2handle,除了Cli和Fpm其他都是配合其他应用使用的。

  • main:PHP的主要代码,主要是输入/输出、web通信,以及PHP框架的初始化操作(如FASTCGI协议的解析、扩展的加载、PHP配置解析等工作)等,位于ZendVM的上一层。

  • ZendVM:是一个虚拟计算机,介于PHP应用与实际计算机之间,用于解析执行PHP代码。ZendVM是PHP语言的核心部分,PHP的代码解释、执行就是由Zend完成的。Zend整体用纯C实现,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。

    虚拟机的特点是实现跨平台,只需要按照不同平台编译出对应的解析器就可以实现代码的跨平台执行。

  • ext(Extension):扩展是PHP内核提供的一套用于扩充PHP功能的一种方式,PHP社区中有丰富的扩展可供使用。围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的。

    通过扩展,可以使用C/C++实现更强大的功能和更高的性能。扩展可分为PHP扩展、Zend扩展(主要应用于ZendVM)。

    PHP的基本构成

PHP的生命周期

从main()开始,PHP生命周期分为以下几个阶段:

  • 模块初始化阶段(module startup)
  • 请求初始化阶段(request startup)
  • 执行脚本阶段(execute script),编译解析执行。
  • 请求关闭阶段(request shutdown)
  • 模块关闭阶段(module shutdown)

    PHP生命周期

不同的SAPI的实现,各个阶段的执行情况会有一些差异。

PHP实现一个典型动态语言的执行过程:

  • 拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令(opcodes);
  • ZEND虚拟机顺次执行这些指令完成操作,进行语义解析,然后通过执行引擎执行。

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

参考:

  1. 秦朋 《PHP7内和剖析》第1.4/5节
  2. PHP的运行机制与原理(底层)
  3. PHP底层的运行机制与原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DSP/BIOS的基本介绍

DSP/BIOS的基本介绍 DSP/BIOS是一个简易的实时嵌入式操作系统,主要面向实时调度与同步、主机/目标系统通信,以及实时监测等应用,具有实时操作系统的诸多功能,如任务的调度管理、任务间的同步和通信、内存管理、实时时钟管理、中断…

PHP7的变化

引言PHP7与PHP5版本相比有非常大的变化,尤其是在Zend引擎方面。为了提升性能,PHP7对Zend进行了深度优化,使得PHP的运行速度大大提高,比PHP5.0-5.6快了近5倍,同时还降低了PHP对系统资源的占用。 PHP7比较大的变化有&…

Git的下载安装

Git的下载安装 在你开始使用 Git 前,需要将它安装在你的计算机上。 即便已经安装,最好将它升级到最新的版本。 你可以通 过软件包或者其它安装程序来安装,或者下载源码编译安装。 或者 测试一下是否安装成功

Jacobi并行拆解【补充】

作者:桂。 时间:2018-04-24 22:04:52 链接:http://www.cnblogs.com/xingshansi/p/8934373.html 前言 本文为Jacobi并行拆解一文的补充,给出另一种矩阵运算的思路。 一、算法流程 对于复数相关矩阵R,通过矩阵变换,在…

PHP内核——内存管理

PHP中的变量是不需要手动释放的,内核帮我们实现了变量的内训管理,包括内存的分配与回收。本文主要介绍PHP中与内存相关的知识点,包括变量的GC机制、垃圾回收以及底层的内存池实现,除此还有一些线程安全相关的知识点。 变量的自动G…

买房贷款被拒,该如何补救?

买房贷款被拒,想要补救得先找到根源,然后才能对症下药。下面我们就来分析下房贷被拒的原因,以及补救的方法。一、征信不良一般在提交房贷资料之前银行会先查询申请人的信用记录,银行对征信的要求一般是连三累六,也就是…

配置有户名和邮箱

配置有户名和邮箱 按上下键,可以切换到历史命令。 修改信息 获取单独的信息 Git help 就是对各种命令进行查询 对help中的具体命令进行查询

这4种钱没有也要借,不能等

借钱?说起来好像是一件没有面子的事情,但是我们认真观察下人的一生,我们会发现,在不同的时间段,我们会面临各种各样的问题, 我们所处的环境都会不一样,有时候有些钱是必须要花的,即使…

注意:这些信用卡不激活也会产生费用

银监会规定,信用卡未经持卡人激活,不得扣收任何费用。因此很多人都以为信用卡不激活就不会产生费用,挺多留下一个征信查询记录,但这只针对普通的金卡、白金卡的情况,如果你申请的是特种卡、高端白金卡,钻石…

管理git项目

管理git项目 错误示范 第一步:想建立项目文件夹 第二步:进入到项目文件夹下 第三步:在项目文件夹下使用git命令 正确示范 第一步:创建项目文件 第二步:进入到项目文件夹下 第三步:初始化项目文件的…

有人说,如果有条件一定要远离穷人,你赞成吗?

我觉得应该远离穷人的环境及思想,而不是远离穷人。我记得有一位老师说过一句话:“一个人要走多远才能成功,关键是看与谁同行”。当时听这句的时候,觉得挺有哲理的,但并没有理解其中的深意,后来工作了多年之…

信用卡套现只要正常还款,银行是不是睁只眼闭只眼?

这要怎么说呢,目前没有法律规定说持卡人不能套现,套现要分恶意的还是非恶意的套现。只要你能够按时还款,你就是正常的消费,如果你套现之后出现逾期或不还,那你就是恶意套现,对于恶意套现,银行肯…

commit的作用

commit的作用 commit的作用:提交和保持的状态。会产生一个档案号。 没有被追踪时,不能使用commit(没有被提交)

银行理财不再保本保息,你还敢买吗?

2018年4月27日,《关于规范金融机构资产管理业务的指导意见》正式发布。这个指导意见的发布有几个大家最关心的点:一是银行的理财产品不能承诺保本保收益;二是银行不再承诺刚性兑付。所谓不在承诺保本保收益就是,以后购买银行理财产…

房贷是不是越多越久越好?

从理论上来说,房贷确实是越多、越久越有利,但是在操作的过程中需要根据自己的还款能力来定。为什么房贷越多越久越好?很简单的一个道理,物价每年都在上涨,而房贷不是每年都在涨,除非基准利率调整了才会跟着…

log追踪和追踪文件修改前后的区别

log追踪 :q表示退出 追踪文件修改前后的区别 只要没有git commit,就可以查看修改的区别

Vivado抓取信号

前言1111 FPGA调试需要抓取特定信号,一个直观的思路是:保存抓取的信号,事后分析/ 或者 导出实测数据,用作后续算法仿真验证。 本文简要记录数据的导出及读取。 一、信号导出 (1)把想要观测的信号线加入在线…

余额宝升级,限额限时解除,以后再也不用定闹钟抢破头了!

余额宝自2014年推出以来深得老百姓的喜欢,目前已经成为普通来百姓的理财神器,但是因为余额宝发展速度太快,累积的风险压力不断增加,所以余额宝一再限额,限购,限时。目前余额宝单个客户限额是10万元&#xf…

如何配置Git环境变量

如何配置Git环境变量 首先找到git的执行文件目录 右击选择属性 进入到bin文件下,复制执行文件路径 D:\git\Git\bin然后,搜索环境变量

征信报告上的逾期记录应该怎么清除?

正常情况下信用逾期是不能清除的,特殊情况除外。正常逾期不能申请消除,只能等时间消除人行征信中心规定,个人不良征信记录的记录时间是5年。但是这个5年是有前提条件的,5年时间是从你还清所有欠款的那天开始算起。比如你信用卡出现…