PHP7新特性foreach 修改示例介绍


Posted in PHP onAugust 26, 2016

一、foreach()循环对数组内部指针不再起作用,在PHP7之前,当数组通过foreach迭代时,数组指针会移动。现在开始,不再如此,见下面代码。。

$array = [0, 1, 2];
foreach ($array as &$val) 
{
var_dump(current($array));
}

PHP5运行的结果会打印int(1) int(2) bool(false)

PHP7运行的结果会打印三次int(0),也就是说数组的内部指针并没有改变。

之前运行的结果会打印int(1), int(2)和bool(false)

二、按照值进行循环的时候,foreach是对该数组的拷贝操作

foreach按照值进行循环的时候(by-value),foreach是对该数组的一个拷贝进行操作。这样在循环过程中对数组做的修改是不会影响循环行为的。

$array = [0, 1, 2];
$ref =& $array; // Necessary to trigger the old behavior
foreach ($array as $val) {
var_dump($val);
unset($array[1]);
}

上面的代码虽然在循环中把数组的第二个元素unset掉,但PHP7还是会把三个元素打印出来:(0 1 2)
之前老版本的PHP会把1跳过,只打印(0 2).

三、按照引用进行循环的时候,对数组的修改会影响循环。

如果在循环的时候是引用的方式,对数组的修改会影响循环行为。不过PHP7版本优化了很多场景下面位置的维护。比如在循环时往数组中追加元素。

$array = [0];
foreach ($array as &$val) {
var_dump($val);
$array[1] = 1;
}

上面的代码中追加的元素也会参与循环,这样PHP7会打印"int(0) int(1)",老版本只会打印"int(0)"。

四、对简单对象plain (non-Traversable) 的循环。

对简单对象的循环,不管是按照值循环还是按引用循环,和按照引用对数组循环的行为是一样的。不过对位置的管理会更加精确。

五、对迭代对象(Traversable objects)对象行为和之前一致。

编者按:stackoverflow上面的解释:Traversable object is one that implements Iterator or IteratorAggregate interface。如果一个对象实现了iterator或者IteratorAggregate接口,即可称之为迭代对象。

以上所述是小编给大家介绍的PHP7新特性foreach 修改,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
删除无限级目录与文件代码共享
Jul 12 PHP
php中变量及部分适用方法
Mar 27 PHP
php模块memcache和memcached区别分析
Jun 14 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
Nov 11 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
简单的自定义php模板引擎
Aug 26 #PHP
PHP flush 函数使用注意事项
Aug 26 #PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 #PHP
简单的pgsql pdo php操作类实现代码
Aug 25 #PHP
php mongodb操作类 带几个简单的例子
Aug 25 #PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 #PHP
php 的反射详解及示例代码
Aug 25 #PHP
You might like
BBS(php & mysql)完整版(五)
2006/10/09 PHP
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
详解PHP执行定时任务的实现思路
2015/12/21 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
ASP SQL防注入的方法
2008/12/25 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
工厂门卫岗位职责
2013/11/25 职场文书
学前班教师的自我鉴定
2013/12/05 职场文书
yy生日主持词
2014/03/20 职场文书
养成教育经验材料
2014/05/26 职场文书
小学生常见病防治方案
2014/06/06 职场文书
2015年见习期工作总结
2014/12/12 职场文书
工作岗位职责范本
2015/02/15 职场文书
python实现会员管理系统
2022/03/18 Python