php mysql 实现原理_PHP的运行机制与原理

看似简单的语言,其实精通起来也没有那么容易。下面根绝网上的讲解和自己的了解整理一下下面的内容。

我们需要知道底层原理的实现。

说到php的运行机制还是先给大家介绍PHP的模块。php总共有三个模块,内核,zend引擎,以及扩展层。

PHP内核用来处理请求,文件流,错误处理等相关操作。

zend引擎用以将源文件转换为机器语言,然后在虚拟机上运行它。

扩展层是一组函数,类库和流。

PHP使用它们来执行一些特性的操作。

比如,我们需要使用mysql扩展来链接数据库,当zend执行程序时可能会需要链接若干扩展,这是zend将控制器交给扩展,等处理特定任务后在返还。

最后,zend将程序运行结果返回给PHP内核,它在将结果传送给SAP层,最终输出到浏览器上。

我们需要知道的是PHP使用C来写的,具体的说,就是一个用C语言实现包含大量组件的软件框架。

也可以说PHP就是C语言来写的一个大型软件。

我们了解底层实现原理,可以帮助我们优化程序。了解内存管理,框架模型。

1:php的设计理念及特点

多进程模型,PHP是多进程模型,不同请求之间互不干扰,这样保证了一个请求挂掉不会对全盘服务造成影响。

php同时也支持多线程模型。

php是弱类型语言,一个变量的类型不是一开始就确定不变,而是在运行中会确定并可能发生隐式或者显式的类型转换。这种机制的灵活性在web开发中非常方便高效。

zend引擎+组件的模式降低内部耦合。

2:PHP的四层体系。

a4c26d1e5885305701be709a3d33442f.png

找一张网上的图片。大家可以看看情况。

zend

引擎:zend引擎使用纯C实现,是PHP的内核部分,他将PHP代码翻译(词法,语法解析等一系列过程)为可执行opcode的处理并实现相应的处理方法,实现了基本的数据结构(如hashtabel

oo)内存分配及管理,提供了响应的api方法供外部调用。是一切的核心,所有的外围功能均围绕zend引擎展开。

Extension:围绕zend引擎,extension通过组件方式提供各种基础服务,我们常见的各种内置函数如array,标准库等都是通过extension来实现,用户也可以根据需要实现自己的extendsion以达到功能扩展,性能优化等目的。

Sapi  sapi全称是Server Application programming

Interface,也就是服务端应用编程接口,sapi通过一系列钩子函数,使得PHP可以和外围交互数据。这是php非常优雅和成功的一个设计。

上层应用:这就是我们平时编程php程序,通过不同的sapi方式得到各种各样的应用模式通过web服务器实现web应用。在命令行下以脚本方式运行等等。

3:sapisapi通过一系列的接口,使得外部应用可以和PHP交换数据并可以根据不同应用特点实现特定的处理方法。我们常见的sapi有

apache2handel

这是apache作为服务器。采用mod_php模式运行时候处理方式,也是现在应用最广泛的一种。

cgi 这是web服务器和php的另外一种交互方式,也就是有名的fastcgi协议。

cli  命令行调用的应用模式

4:php的执行流程 和 opcode

php代码执行所经过的流程

a4c26d1e5885305701be709a3d33442f.png

从图可以看出,我们看到,PHP实现了一个典型的动态语言执行过程,拿到一段

代码之后,经过词法解析。语法解析等阶段后,源程序会被翻译成一个个指令,然后zend虚拟机顺次执行这些指令完成操作。PHP本身是用C实现的,所以最终调用的也都是C的函数。

PHPcode是php程序执行的基本单元,一个opcode由两个参数(op1,op2)返回值和处理函数组成。

php程序最终被翻译为一组opcode处理函数的顺序执行。

常见的几个处理函数:

ZEND_ASSIGN_SPEC_CV_CV_HANDLER : 变量分配 ($a=$b)

ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER:函数调用

ZEND_CONCAT_SPEC_CV_CV_HANDLER:字符串拼接 $a.$b

ZEND_ADD_SPEC_CV_CONST_HANDLER: 加法运算 $a+2

ZEND_IS_EQUAL_SPEC_CV_CONST:判断相等 $a==1

ZEND_IS_IDENTICAL_SPEC_CV_CONST:判断相等 $a===1

上面几个函数完全不知道什么意思。今天就先到这里了,这些东西都需要好好消化一点了。

对了C语言对我们来说实现相当重要的。有空还是好好学习一下C吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值