PHP7版本函数的参数和返回值增长了类型限定。
缘由:为了PHP7.1版本JIT特性作准备,增长类型以后PHP, JIT能够准确判断变量类型,生成最佳的机器指令。php
function test (int $a, string $b, array $c) :int { // code }
PHP程序出错后,过去Zend引擎会发生致命错误并终止程序运行,PHP7能够使用try/catch
捕获错误。html
try { no_func(); } catch (EngineException $e) { echo "Exception: {$e->getMessage()}\n"; }
zval使用栈内存
在Zend引擎和扩展中,常常要建立一个PHP变量,底层就是一个zval
指针。以前的PHP版本都是经过MAKE_STD_ZVAL
动态的从堆上分配一个zval
内存。而PHP7能够直接使用栈内存.算法
PHP5数组
zval *val; MAKE_STD_ZVAL(val);
PHP7性能优化
zval val;
做用:节省一次内存分配和管理.php7
zend_string存储hash值,array查询不须要重复计算hash
PHP7为字符串单首创建了新类型叫作zend_string
,除了char*
指针和长度以外,增长了一个hash字段,用于保存字符串的hash值。数组键值查找不须要反复计算hash值函数
struct _zend_string { zend_refcounted gc; zend_ulog h; size_t len; char val[1] }
优化数组的键值查找的性能。性能
hashtable桶内直接存数据,减小了内存申请次数,提高了Cache命中率和内存访问速度
zend_parse_parameters改成 宏实现,性能提高5%
新增长4中OPCODE,call_user_funciton
,is_int/string/array
,strlen
,defeind
4个函数变为 PHP OpCode指令
其它性能优化,基础类型int,float,bool等改成直接进行值拷贝,排序算法改进
,PCRE with JIT
,execute_data
和opline使用全局寄存器
,使用gdb4.8的PGO功能
PHP7与JIT
PHP7.0-final版本没有携带JIT特性优化
JIT是just in time 的缩写,表示运行时将指令转为二进制机器码。
对于计算密集型的程序,JIT能够将PHP的OpCode直接转换为机器码,大幅提高性能。指针