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分页函数示例代码分享
Feb 24 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 PHP
PHP实现生成推广海报的方法详解
Mar 14 PHP
stripos函数知识点实例分享
Feb 11 PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 09 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
Dec 16 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+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
Jquery-data的三种用法
2017/04/18 jQuery
react-native之ART绘图方法详解
2017/08/08 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
python 实现让字典的value 成为列表
2019/12/16 Python
Python range与enumerate函数区别解析
2020/02/28 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
python里反向传播算法详解
2020/11/22 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
迪拜航空官方网站:flydubai
2017/04/20 全球购物
Python如何实现单例模式
2016/06/03 面试题
市场部业务员岗位职责
2014/04/02 职场文书
大专生找工作自荐书
2014/06/10 职场文书
校园标语大全
2014/06/19 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
工作失误检讨书
2015/01/26 职场文书
会议主持词结束语
2015/07/03 职场文书
一些让Python代码简洁的实用技巧总结
2021/08/23 Python