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 trim 去除空字符的定义与语法介绍
May 31 PHP
深入PHP运行环境配置的详解
Jun 04 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
Apr 02 PHP
php多重接口的实现方法
Jun 20 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
Jun 28 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
PHP使用pdo实现事务处理操作示例
Sep 05 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
Oct 18 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 PHP
PHP7 其他语言层面的修改
Mar 09 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
在字符串中把网址改成超级链接
2006/10/09 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
用php解析html的实现代码
2011/08/08 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
php常用图片处理类
2016/03/16 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
JSON对象 详解及实例代码
2016/10/18 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
Vue.js中的computed工作原理
2018/03/22 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
python读取中文txt文本的方法
2018/04/12 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Python PyQt5整理介绍
2020/04/01 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
数据库的约束含义
2012/09/09 面试题
六个一活动实施方案
2014/03/21 职场文书
产品销售计划书
2014/05/04 职场文书
抵押贷款承诺书
2014/05/30 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
户外亲子活动总结
2015/05/08 职场文书
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS