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 Notice: Undefined index 错误提示解决方法
Aug 29 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
PHP中捕获超时事件的方法实例
Feb 12 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
Jan 05 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 PHP
PHP判断是否微信访问的方法示例
Mar 27 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
php如何实现数据库的备份和恢复
Nov 30 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分页函数
2006/07/08 PHP
多文件上传的例子
2006/10/09 PHP
如何对PHP程序中的常见漏洞进行攻击
2006/10/09 PHP
第五节--克隆
2006/11/16 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
jqueryUI tab标签页代码分享
2017/10/09 jQuery
vue实现商城购物车功能
2017/11/27 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
python中元类用法实例
2014/10/10 Python
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
Django集成celery发送异步邮件实例
2019/12/17 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
介绍一下UNIX启动过程
2013/11/14 面试题
电大自我鉴定
2013/10/27 职场文书
酒店人事专员岗位职责
2013/12/19 职场文书
高级护理专业毕业生推荐信
2013/12/25 职场文书
上课打牌的检讨书
2014/02/15 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL