关于PHP底层运行机制与原理的思考之建立一个简单的PHP核心架构图

    提到这个PHP底层的运行原理和机制,如果要用一张图来描述的话,相信大家的脑海里都会浮现下面的这张图:


    诚然,PHP的核心架构确实是如上图所示。不管是让谁来说,也差不多就是这么多。但是,我今天写这篇博客的原因,无非就是加深下,自己对这个PHP核心架构的一些理解。

    首先,从整体来说,PHP可以细分为四个层次。最核心的,就是Zend引擎。其次呢,就是和它搭配的EXT(extensions)这个部分了。再来就是sapi(Server Application Programming Interface,也就是服务端应用编程接口)这个部分,最后呢,就是上层应用这部分,其实就是我们平时编写的PHP程序。

    有了上面这一些认知后,我们就可以按着重要的层次来逐个了解这些东西。跟别的知识一样,我们得先在脑海里有了一个大致的架构之后,完事再慢慢地填充它。废话不多说,咱们先来看,zend引擎。

    zend这个东西呢,它的整体用纯C实现,是PHP的内核部分,它可以将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行的opcode来进行处理并实现相应的处理方法。完事呢,它还实现了基本的数据结构(如:hashtable、OO),以及内存分配机制及管理,并且提供了相应的api方法供外部调用。总之呢,它是一切的核心,所有的外围功能均围绕Zend实现。

    再来看EXT这个鬼。从图片上大家可以看出来,它是紧紧挨着并且围绕着zend引擎的,所以大家可以推理出来它与zend的关系应当是很紧密的。它是通过组件式的方式提供各种基础服务,比如我们常见的各种内置函数(array系列)、标准库等都是通过extension来实现。同样,我们也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的PHP中间层、富文本解析就是extension的典型应用)。

    好,再来看下sapi这个鬼。它可以通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的一个设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。

    再来就是什么上层应用这个东西了。其实我们平常编码就可以看成通过调用不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。

    到这里,基本的架构就可以在脑海里建立起来了。在这里呢,跟大家再分享一句比较有名的话,可以形象的解释PHP各个层次之间的关系,这句话就是:如果PHP是一辆车,那么车的框架就是PHP本身,Zend是车的引擎(发动机),Ext下面的各种组件就是车的轮子,Sapi可以看做是公路,车可以跑在不同类型的公路上,而一次PHP程序的执行就是汽车跑在公路上。因此,我们需要:性能优异的引擎+合适的车轮+正确的跑道。

    好啦,本文就到这里了。关于底层运行原理与机制,肯定不是一句两句话可以说的完的,后期会陆续更新上的。如果感觉不错的话,请多多点赞支持哦。。。

猜你喜欢

转载自blog.csdn.net/luyaran/article/details/80758998