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 相关文章推荐
WML,Apache,和 PHP 的介绍
Oct 09 PHP
杏林同学录(六)
Oct 09 PHP
php缓存技术介绍
Nov 25 PHP
Gregarius中文日期格式问题解决办法
Apr 22 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
PHP面向接口编程 耦合设计模式 简单范例
Mar 23 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
thinkphp的c方法使用示例
Feb 24 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
PHP中使用curl伪造IP的简单方法
Aug 07 PHP
PHP基于递归算法解决兔子生兔子问题
May 11 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 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中yii框架实例用法
2020/12/22 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
javascript 函数式编程
2007/08/16 Javascript
jQuery 动画基础教程
2008/12/25 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
python连接池实现示例程序
2013/11/26 Python
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python合并多个装饰器小技巧
2015/04/28 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
利用python获取Ping结果示例代码
2017/07/06 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
python实现转圈打印矩阵
2019/03/02 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python 列表推导式使用详解
2019/08/29 Python
keras.layer.input()用法说明
2020/06/16 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
优秀中职教师事迹材料
2014/08/26 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
离婚协议书的范本
2015/01/27 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
春节晚会开场白
2015/05/29 职场文书
大学生活感想
2015/08/10 职场文书