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 相关文章推荐
PHP5 安装方法
Oct 09 PHP
打造计数器DIY三步曲(上)
Oct 09 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
Oct 25 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
Oct 15 PHP
php的mssql数据库连接类实例
Nov 28 PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 PHP
是 WordPress 让 PHP 更流行了 而不是框架
Feb 03 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
Thinkphp框架中D方法与M方法的区别
Dec 23 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
Laravel中的Auth模块详解
Aug 17 PHP
PHP操作Redis数据库常用方法示例
Aug 25 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
PHP5 面向对象(学习记录)
2009/12/02 PHP
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
基于jQuery实现网页打印功能
2015/12/01 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
JavaScript字符串对象
2017/01/14 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
Python Requests 基础入门
2016/04/07 Python
Python正则表达式完全指南
2017/05/25 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Python如何快速实现分布式任务
2017/07/06 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
python zip()函数使用方法解析
2019/10/31 Python
Python调用.NET库的方法步骤
2019/12/27 Python
Python实现FLV视频拼接功能
2020/01/21 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
检察机关个人对照检查材料
2014/09/15 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
2014年副班长工作总结
2014/12/10 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL