php 结构体_【PHP7内核剖析】——PHP基础架构

2e566545e22e81af65b9add6e3879112.png

最近在看【PHP7内核剖析】这本书,看完之后有点点感悟,在这里对每个章节做下总结,也是为了自己以后回顾知识点,也是为了给更多的读者提供一点儿思路。本人小白,后面各位如果看到哪里说的不对的地方,欢迎大家一起来指出问题,特此感谢!

正文开始:
首先,PHP的基础架构我总结一下 一.PHP7的改变抽象语法树:在之前的版本中,PHP的解析器与执行器大部分是耦合在一起的。在PHP7的版本中,首相将PHP源码生成了抽象语法树,然后执行器负责执行生成的语法即可,大大降低了解析器与执行器的耦合度,为以后的扩展做了很大的便利性。Native TLS:这块主要是讲了线程安全的问题。PHP中很多的变量需要在多个函数中使用,使用全局变量不能适用于多线程的情况,故PHP做了一个线程安全管理器,将全局资源进行了线程隔离,是的不同的线程之间不受影响。在PHP版本之前,这写资源是通过参数传递的形式实现的,这样的话,使得每走一步都需要传递大量的参数,第一数据太大,第二的话,容易丢失,不是很安全。PHP7版本将这块的资源做了一个线程局部存储来实现。具体就是使用了__thread标识一个全局变量,这样这个变量就是线程独享的了。强类型的出现:我们知道,PHP一直都是弱类型,但是在PHP7版本中,实现了强类型,具体来说就是函数或者变量均可以指定类型,例如指定一个字符串变量 string $str。当然,强类型在PHP7版本中是可选的,就是说你可以去根据自己的需求选择是否声明它是强类型或者弱类型。错误处理:PHP7版本将更多的错误信息用try catch的形式抛出,减少一些致命错误,使得程序可以更加可控。zval结构的变化:PHP的变量在底层都是一个zval的struct结构体。在之前的版本中,ref_count的值是存放在struct的外部结构中的,PHP7是将ref_count存放在了value里面去,这样,我们可以理解为zval仅是一个变量名,value才是它真正的值。这个改变使得PHP的复制更加简洁,除此之外,zval的结构大小也从24byte减少到了16byte。
Hashtable的变化:主要是减少了结构大小。二.PHP的构成
1. SAPI:应用接口层,主要是cli与fpm
2. main
3. zendVM:虚拟主机,类似于JVM
4. extesion:扩展,包括zend扩展与PHP扩展
5. TSRM:线程完全三.PHP生命周期
1. 模块初始化
2. 请求初始化
3. 脚本执行
4. 请求关闭
5. 模块关闭
————————————————

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值