最近写PHP代码比较多,也算不上什么精通,感觉要使用php就得知道这门语言的底层原理,这里决定了解一下PHP底层的工作原理。
PHP是一种适用于Web开发的动态语言,是一个用C语言实现,包含大量组件的软件框架。狭义方面来说,可以说是个UI框架(用户界面,也可以说是UI模版(UI定义))
php四层体系如下:
从下到上的四层体系:
这里有个很好的通俗比喻:如果PHP是一辆车,那么车的框架就是PHP本身,Zend是车的引擎(发动机),Extensions下面的各种组件就是车的轮子,Sapi可以看做是公路,车可以跑在不同类型的公路上,而一次PHP程序的执行就是汽车跑在公路上。因此,我们需要:性能优异的引擎+合适的车轮+正确的跑道。
常见的Sapi有:
拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令(opcodes),然后ZEND虚拟机顺次执行这些指令完成操作。PHP本身是用C实现的,因此最终调用的也是C的函数,实际上,我们可以把PHP看做一个C开发的软件。
PHP的执行的核心是翻译出来的一条一条指令,也即opcode。
Opcode是PHP程序执行的最基本单位。一个opcode由两个参数(op1,op2)、返回值和处理函数组成。PHP程序最终被翻译为一组opcode处理函数的顺序执行。
PHP是一门弱类型语言,本身不严格区分变量的类型。PHP变量可以分为简单类型(int、string、boolean)、集合类型(array、resource、object)和常量(const)。所有变量在底层都是同一种结构zval。
zval主要由三部分组成:
type:指定变量的类型
refcount&is_ref:用来实现引用计数
value:存储变量的实际数据(核心)。因为要存储多种类型,所以zvalue是一个union,也由此实现了弱类型。
https://sphenginx.github.io/2016/07/11/php-theory/
https://seminelee.github.io/2017/11/19/php/
http://www.nowamagic.net/librarys/veda/detail/102
具体内容可以参考上面几篇文章