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 相关文章推荐
5.PHP的其他功能
Oct 09 PHP
那些年一起学习的PHP(一)
Mar 21 PHP
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
destoon调用自定义模板及样式的公告栏
Jun 21 PHP
php专用数组排序类ArraySortUtil用法实例
Apr 03 PHP
PHP使用递归生成文章树
Apr 21 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
PHP curl使用实例
Jul 02 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
Yii2实现UploadedFile上传文件示例
Feb 15 PHP
php用xpath解析html的代码实例讲解
Feb 14 PHP
thinkphp5 redis缓存新增方法实例讲解
Mar 24 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+highchats生成动态统计图
2014/05/21 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
javascript中的this详解
2014/12/08 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
domReady的实现案例
2016/11/23 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
2016/12/23 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
浅谈Python中的闭包
2015/07/08 Python
python实现Zabbix-API监控
2018/09/17 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
2020/11/17 Python
Python项目打包成二进制的方法
2020/12/30 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
端口镜像是怎么实现的
2014/03/25 面试题
2014年教师业务工作总结
2014/12/19 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
商业计划书范文
2019/04/24 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python