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 相关文章推荐
PHP生成静态页面详解
Nov 19 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
php gzip压缩输出的实现方法
Apr 27 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
php调整服务器时间的方法
Apr 03 PHP
无需数据库在线投票调查php代码
Jul 20 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
Nov 07 PHP
php生成HTML文件的类方法
Oct 11 PHP
php服务器的系统详解
Oct 12 PHP
Yii 框架控制器创建使用及控制器响应操作示例
Oct 14 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
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
Python 中 Meta Classes详解
2016/02/13 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
详解python如何引用包package
2020/06/07 Python
如何教少儿学习Python编程
2020/07/10 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
如何使用Python调整图像大小
2020/09/26 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
好人好事事迹材料
2014/02/12 职场文书
商务宴会祝酒词
2015/08/11 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS