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
聊天室php&mysql(四)
Oct 09 PHP
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
用PHP来计算某个目录大小的方法
Apr 01 PHP
PHP写日志的实现方法
Nov 05 PHP
php通过session防url攻击方法
Dec 10 PHP
PHP+JS实现大规模数据提交的方法
Jul 02 PHP
win7系统配置php+Apache+mysql环境的方法
Aug 21 PHP
smarty高级特性之对象的使用方法
Dec 25 PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 PHP
php workerman定时任务的实现代码
Dec 23 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 resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
js 实现 input type="file" 文件上传示例代码
2013/08/07 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python去掉行尾的换行符方法
2017/01/04 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
python实现数据图表
2017/07/29 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
教师的实习鉴定
2013/12/15 职场文书
化验室技术员岗位职责
2013/12/24 职场文书
大学生职业生涯规划书范文
2014/01/04 职场文书
《陈毅探母》教学反思
2014/05/01 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
升学宴祝酒词
2015/08/11 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers