php7新特新

1.变量类型
php7版本函数的参数和返回值增加了类型限定。为什么php要加入类型限定,实际上此项特性是为了php7.1版本的JIT特性做准备,增加类型后php JIT可以准确判断变量类型,生成最佳的机器指令。
function test(int $a, string $b, array $c) : int {
}

2.错误异常
php程序出错hou过去Zend引擎会发生致命错误并终止程序运行,php7可以使用try/catch捕获错误。
try {
non_exists_func();
} catch (EngineException $e){
echo "Exception:{$e->getMessage()}\n"
}

3.zval使用栈内存
在Zend引擎和扩展中,经常要创建一个PHP的变量,底层就是一个zval指针。之前的版本都是通过MAKE_STD_ZVAL动态的从堆上分配一个zval内存。而PHP7直接使用栈内存。
PHP5
zval *val;MAKE_STD_ZVAL(val);
PHP7
zval val;
[优点:节省了一次内存分配]

4.Zend_string存储hash值,array查询不再需要重复计算hash
PHP7为字符串单独创建了新类型叫做zend_string,除了char*指针和长度之外,增加了一个hash字段,用于保存字符串的hash值。数组键值查找不需要反复计算hash值。
struct _zend_string{
zend_refcounted gc;
zend_ulong h;
size_t len;
char val[1]
};

5.hashtable桶内直接放数据,减少了内存的申请次数,提升了Cache命中率和内存访问速度
zend_parse_parameters改为宏实现,性能提升5%
新增4种OPCODE,call_user_function,is_int/string/array,strlen,defined 4个函数变成了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直接转换为机器码,大幅提升性能
PHP开发组已重启JIT开发计划,预计PHP7.1版本会带有JIT特性

原文地址:https://www.cnblogs.com/zhirusi/p/12014173.html

时间: 2024-10-10 15:28:07

php7新特新的相关文章

PHP7.0 的新特性

PHP7.0 的新特性经常会被面试官问到,在平时的项目开发中运用它们也会提升一定的代码质量和代码运行性能,可见这个知识点的重要性.不过有很多人都没有去系统的了解掌握,今天我刚好系统整理了一番分享出来. 图片版 文字版 1. 新增了标量类型声明和函数的返回值类型声明 例如: <?php declare(strict_types=1)//1:严格模式 0:强制模式(默认) class OrderService extends BaseService { ... /** * 所有订单详情都是通过这个入

Atitit.mysql&#160;5.0&#160;5.5&#160;&#160;5.6&#160;5.7&#160;&#160;新特性&#160;新功能

Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 memcached API 直接访问 NoSQL2 1.4. 更好的复制2 1.5. Performance Schema2 2. MySQL 5.7.62 2.1. 内建中文全文索引2 2.2. 多主复制2 2.3. other2 3. 参考2 1. MySQL  5.6    5 大新特性 M

Atitit.&#160;visual&#160;studio&#160;vs2003&#160;vs2005&#160;vs2008&#160;&#160;VS2010&#160;vs2012&#160;vs2015新特性&#160;新功能.doc

Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc 1.1. Visual Studio2 1.2. Visual Studio 972 1.3. Visual Studio 6.02 1.4. Vs20022 1.5. Vs20032 1.6. Vs20052 1.6.1. 数据访问  Web开发     Windows Forms 方面的开发特性增强2 1.6.2. Refactoring 2

Atitit.mysql 5.0 5.5 &#160;5.6 5.7 &#160;新特性 新功能

Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 memcached API 直接访问 NoSQL2 1.4. 更好的复制2 1.5. Performance Schema2 2. MySQL 5.7.62 2.1. 内建中文全文索引2 2.2. 多主复制2 2.3. other2 3. 参考2 1. MySQL  5.6    5 大新特性 M

Android问题-新电脑新系统WIN764位上安装简版本的XE8提示“Unit not found: &#39;System&#39;”

问题现象:电脑太慢,重安新系统,所以要安DELPHIXE8,但安装过程中出现二次杀软件提示,我都选的是通过.但是XE8过程到最后的"Create AVD"时出现一个错误(具体是什么,我没注意看,好像是说什么东东建立时失败了).之后用安装好的XE8生成EXE没有问题,生成android程序就不行了.提示"[DCC Fatal Error] Project1.dpr(1): F1027 Unit not found: 'System' or binary equivalents

重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient

[源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之通信的新特性 新的 HttpClient http get string http get stream http post string http post stream 示例HTTP 服务端WebServer/HttpDemo.aspx.cs /* * 用于响应 http 请求 */ using System; using System.IO; using System.Threading; u

新随笔新随笔

新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随笔新随笔 新随笔新随笔 新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随笔新随笔 新随笔新随笔新随笔新随笔 新随

新春装修,明魅蓝墙面涂刷,给你新家新气象!

随着阅历的增加,审美的开阔,简单的黑白灰装修,在铮铮向荣的青年人眼里太单调,生活是完事可期待的,往事随风爱很随意,我喜欢有色彩的生命! 在考虑近期装修的事情,特别喜欢明魅蓝墙面涂刷,给新家新气象! 威海家装 进门处,虽然不像平常人家里有一个长长的玄关,可以在玄关处定制鞋柜,而这个业主家就是借用了餐厅墙面的空间,定制了一个到顶的大鞋柜,鞋柜中间预留空间放包包和钥匙,而鞋柜的最底部预留了十几公分的高度,可以摆放常更换的鞋子. http://www.whhont.com/school/751.html

2020物联网展新起点新征程扬帆起航

2020第十三届亚洲国际物联网展览会-南京站The 13th Asia (Nanjing) international content networking exhibition 时间:2020年03月26-28日 地点:中国?南京国际会展中心 组织单位 特邀单位:××× ×××商务部主办单位:北京铭世博国际展览有限公司 支持单位:××× ×××中国智能家居产业联盟 中华物联网联盟国家信息化专家咨询委员会 中国物联网产业协会 承办单位:北京铭世博国际展览有限公司新起点 新启程 扬帆起航前言南京六

golang1.13中重要的新特新

本文索引 语言变化 数字字面量 越界索引报错的完善 工具链改进 GOPROXY GOSUMDB GOPRIVATE 标准库的新功能 判断变量是否为0值 错误处理的革新 Unwrap Is As golang1.13发布已经有一个月了,本文将会列举其中几个较为重要的特性.我们将会从语言变化.库变化以及工具链的改进这三方面逐个介绍新版本中引入的新特性. 语言变化 go团队一直承诺1.x版本的向前兼容,所以虽然1.13作为第一个开始向go2过渡的版本,其引入的语言变化是极少的,主要只有这两点:更多的数