码迷,mamicode.com
首页 > Web开发 > 详细

PHP7的变化

时间:2018-04-14 15:16:23      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:全局变量   关心   是什么   接收   传参   错误   处理   read   解析   

PHP7对zend进行了深度的优化,使得PHP7的运行速度大大的提高,比PHP5.0~5.6快了近5倍,同时还降低了php对系统资源的占用

下面说下PHP7比较大的几个变化:

1、抽象语法树:之前的版本,PHP代码在语法解析阶段直接生成了zendVM,使得编译器和执行器耦合在一起,导致修改任意一方都会引起另一方的修改,php7增加了抽象语法树,首先将php代码解析生成了抽象语法树,然后将抽象语法树编译为zendVM指令,抽象语法树的加入使得PHP的编译器和执行器很好的隔离开,编译器不要咬关心指令的生成规则,然后执行器根据自己的规则将抽象语法树编译为对应的指令,执行器同样不需要关心该指令的语法规则是什么演绎。

2、Native TLS:PHP提供了一个线程安全资源管理器,将全局资源进行了线程隔离,不同的线程之间互不干扰,使用全局资源需要先获取本线程的资源池,这个过程比较占用时间,实现方式使所有的的函数都需要加速接收资源池的参数,方式不优雅。PHP7中使用nvtive TLS(线程局部存储)来保存线程的资源池,简单的讲就是通过__thread标示一个全局变量,这样这个全局变量就是线程独享的了,不同线程的修改不会相互影响。

3、指定函数参数、返回值类型:

   function foo(string $name): array{ return [];

   }

这个函数的参数必须是字符串类型,返回值必须是数组类型,否则返回error错误

4、zval结构的变化:是PHP的内部结构,zval中有个比较重要的成员refcount_gc,它记录变量的引用计数,引用计数是PHP中实现变量自动回收的基础,也就是记录变量有多少个地方使用的一种机制,PHP5.x引用计数是在zval中而不是具体的value中,导致变量复制的时候需要复制两个结构,PHP7中将引用计数转移到了具体的value中,这样更合理因为zval其实就是变量名而value才是真正的值。除此之外,zval的结构大小也是从24byte减少到了16byte,这是PHP7能够降低系统资源占用的一个优化点所在。

5、异常处理:PHP5.x中很多操作会直接抛出error错误,PHP7将多数错误改成了异常抛出,这样一来就可以通过trycatch拿到,新的异常处理方式使错误处理更加可控。

6、hashtable的变化:哈希表也称为散列表。它是PHP中强大的array()类型的内部实现机构,也是内核中使用频繁的一个结构,hashtable结构的大小从72byte减少到了56byte,同时数组元素bucket的机构也从72byte减少到了32byte

7、执行器:在PHP7中不再采用传参数的方式,而是将execute_data、opline通过寄存器来进行存储,避免了传参导致的频繁出入栈操作,同时寄存器相比内存访问的速度更快,这个优化使得PHP的性能有了5%左右的提升。

8、新的参数解析方式

 

                                                                                                                                                                      -------摘自《PHP内核剖析》

 

PHP7的变化

标签:全局变量   关心   是什么   接收   传参   错误   处理   read   解析   

原文地址:https://www.cnblogs.com/weiluoyan/p/8831634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!