PHP7新特性

目录
  1. 变量类型
  2. 错误异常
  3. PHP7性能优化

变量类型

函数的参数和返回增加了类型限定,增加类型后,PHP JIT可以准确判断变量类型,生成最佳的机器指令。

1
2
3
4
5
function test(int $a, string $b, array $c) : int {

// code

}

错误异常

PHP程序出错后,之前版本Zend引擎会发生致命错误并终止程序运行,PHP7可以使用try/catch捕获错误。

1
2
3
4
5
6
7
8
9
try {

test();

} catch (Throwable $e) {

echo $e->getMessage();

}

PHP7性能优化

  1. zval使用栈内存

在Zend引擎和扩展中,经常要创建一个PHP的变量,底层就是一个zval指针。之前的版本都是通过MAKE_STD_ZVAL动态的从堆上分配一个zval内存。而PHP7可以直接使用栈内存

  1. zend_string存储hash值,array查询不再需要重复计算hash

PHP7为字符串单独创建了新类型叫做zend_string,除了char * 指针和长度之外,增加了一个hash字段,用于保存字符串的hash值。数组键值不需要反复计算hash值。

  1. hashtable 桶内直接存数据,减少了内存申请次数,提升了Cache命中率和内存访问速度。 arBucket改成了arData,arData直接就是一个大块内存,bucket是连续的。

  2. zend_parse_parameters改为宏实现,性能提升5%。

  3. 新增加4种OPCODE,call_user_function,is_int/string/array,strlen,defined4个函数变为PHP opcode指令,速度更快。

  4. 其他优化,如基础类型int、float、bool等改为直接进行值拷贝,排序算法改进(zend_sort)。PCRE with JIT(正则表达式转成机器码)。使用gdb4.8的PGO功能。