PHP7新特性foreach 修改示例介绍

作者:mrr 时间:2024-06-05 09:23:48 

一、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 修改网站的支持!

标签:php7,新特性,foreach
0
投稿

猜你喜欢

  • vite+vue3中使用mock模拟数据问题

    2024-04-28 09:27:56
  • python实现的接收邮件功能示例【基于网易POP3服务器】

    2022-08-24 20:34:41
  • 课程讲解 如何使用SQL Server校勘功能

    2009-01-13 13:27:00
  • asp中的on error resume next用法

    2008-03-09 15:22:00
  • python和shell监控linux服务器的详细代码

    2021-11-09 06:23:22
  • 详细解读Python中的json操作

    2022-02-21 00:55:13
  • SqlServer 2005 T-SQL Query 学习笔记(3)

    2024-01-18 23:44:01
  • 详解Python 使用 selenium 进行自动化测试或者协助日常工作

    2023-09-05 03:44:19
  • python爬虫 requests-html的使用

    2023-05-08 02:41:16
  • python将多个文本文件合并为一个文本的代码(便于搜索)

    2021-10-23 07:21:27
  • django框架之cookie/session的使用示例(小结)

    2023-06-24 08:24:42
  • SQL触发器实例讲解

    2012-04-13 11:52:48
  • asp 各种进制转换函数

    2008-06-24 12:35:00
  • Python序列化模块JSON与Pickle

    2022-11-06 00:24:37
  • Python自动化导出zabbix数据并发邮件脚本

    2022-08-18 12:31:46
  • MYSQL教程:服务器优化和硬件优化

    2009-02-27 15:43:00
  • python获取指定网页上所有超链接的方法

    2023-07-18 11:50:20
  • python简单的函数定义和用法实例

    2022-10-07 12:35:03
  • Yii使用find findAll查找出指定字段的实现方法

    2024-05-03 15:13:37
  • Vue Socket.io源码解读

    2024-06-05 15:28:35
  • asp之家 网络编程 m.aspxhome.com