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 和 HTML
Oct 09 PHP
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
获取URL文件名后缀
Oct 24 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
PHP对文件进行加锁、解锁实例
Jan 23 PHP
php函数传值的引用传递注意事项分析
Jun 25 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 PHP
PHP实现权限管理功能示例
Sep 22 PHP
PHP预定义超全局数组变量小结
Aug 20 PHP
php xhprof使用实例详解
Apr 15 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
一个odbc连mssql分页的类
2006/10/09 PHP
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
JQuery动画与特效实例分析
2015/02/02 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
理解JavaScript原型链
2016/10/25 Javascript
js实现微博发布小功能
2017/01/12 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
js css自定义分页效果
2017/02/24 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
python文件写入实例分析
2015/04/08 Python
Python常用知识点汇总
2016/05/08 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
利用python如何处理nc数据详解
2018/05/23 Python
用Django写天气预报查询网站
2018/10/21 Python
python中的decimal类型转换实例详解
2019/06/26 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
2020/02/18 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
班级道德讲堂实施方案
2014/02/24 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
优秀工作者事迹材料
2014/12/26 职场文书