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 相关文章推荐
人大复印资料处理程序_补充篇
Oct 09 PHP
Discuz板块横排显示图片的实现方法
May 28 PHP
PHP 在线翻译函数代码
May 07 PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
PHP添加Xdebug扩展的方法
Feb 12 PHP
php线性表的入栈与出栈实例分析
Jun 12 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
PHP实现webshell扫描文件木马的方法
Jul 31 PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
解决laravel id非自增 模型取回为0 的问题
Oct 11 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中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
eval与window.eval的差别分析
2011/03/17 Javascript
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
python基础教程之数字处理(math)模块详解
2014/03/25 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python装饰器基础详解
2016/03/09 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
Python如何telnet到网络设备
2021/02/18 Python
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
元旦晚会活动总结
2014/07/09 职场文书
婚礼父母答谢词
2015/01/04 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
毕业论文致谢词
2015/05/14 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
python函数的两种嵌套方法使用
2022/04/02 Python