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加密扩展库Mcrypt安装和实例
Nov 10 PHP
php GUID生成函数和类
Mar 10 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
PHP常见错误提示含义解释(实用!值得收藏)
Apr 25 PHP
php pdo oracle中文乱码的快速解决方法
May 16 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
php-fpm服务启动脚本的方法
Apr 27 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
兼容ie和firefox js关闭代码
2008/12/11 Javascript
jQuery之浮动窗口实现代码(两种方法)
2010/09/08 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
JS小数运算出现多为小数问题的解决方法
2016/06/02 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
动态创建类实例代码
2009/10/07 Python
Python中的zipfile模块使用详解
2015/06/25 Python
python实现的简单RPG游戏流程实例
2015/06/28 Python
python获得文件创建时间和修改时间的方法
2015/06/30 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
Python实现图片拼接的代码
2018/07/02 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
毕业生个人求职的自我评价
2013/10/28 职场文书
社会工作专业求职信
2014/07/15 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
保研推荐信范文
2015/03/25 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫