当前位置: 首页 > 后端技术 > PHP

PHP7的新特性

时间:2023-03-29 20:02:00 PHP

PHP7发布快三年了,现在已经发展到PHP7.2.9版本了。它的发布给PHP带来了很大的性能提升,主要得益于PHP对Zend引擎的深度优化,同时降低了PHP对系统的资源占用。主要变化如下:抽象语法树在以前的PHP版本中,PHP代码在语法解析阶段直接生成ZendVM指令,即直接在zend_language_parser.y中生成opline指令,将编译器和执行器耦合在一起。PHP7中添加了抽象语法树。首先解析PHP代码生成抽象语法树,然后将抽象语法树编译成ZendVM指令。抽象语法树的加入使得PHP的编译器和执行器很好的分离。编译器不需要关心指令的生成规则,然后执行器根据自己的规则将抽象语法树编译成相应的指令。执行者也不需要关心指令的语法规则是什么样子的。NativeTLSPHP7使用NativeTLS(ThreadLocalStorage)来保存线程的资源池。简单的说就是用__thread来标识一个全局变量,让这个全局变量是线程独享的,不同线程的修改不会互相影响。指定函数参数和返回值类型在PHP7中,可以指定函数参数和返回值的类型。PHP7对zval结构的改变,将引用计数转为具体值,更加合理。另外,zval结构体的大小也从24bytes减少到16bytes,这是PHP7减少系统资源占用的一个优化点。异常处理PHP5.x中的很多操作都会直接抛出error错误。在PHP7中,大部分错误都改为异常抛出,这样就可以被trycatch捕获。HashTable的变化PHP7中的HashTable有了非常大的变化,HashTable结构的大小从72byte减小到56byte,同时数组元素Bucket结构也从72byte减小到32byte。executor不再使用PHP7中传参的方式,而是通过寄存器存储execute_data和opline,避免了传参导致的频繁出栈和出栈操作。同时,寄存器的访问速度比内存快。PHP5.x新的参数解析方式使用zend_parse_parameters()来解析函数的参数。PHP7在保留原有方法的同时提供了另一种方法,但新的解析方法更快。