PHP 内核:foreach 是如何工作的(一)

本文探讨PHP内核中foreach的工作原理,通过测试用例揭示foreach不是直接作用于数组,而是使用副本或者依赖源数组指针。文章讨论了数组、对象的迭代方式,以及在迭代过程中修改数组可能带来的问题,包括引用迭代和按值迭代的差异,同时提到了PHP 5和PHP 7在处理迭代时的不同策略。
摘要由CSDN通过智能技术生成

foreach 是如何工作的?

PHP 内核:foreach 是如何工作的(二)

首先声明,我知道 foreach 是什么,也知道怎么去用它。但这个问题关心的是,内核中 foreach 是如何运行的,我不想回答关于 “如何使用 foreach 循环数组” 的任何问题。

很长时间我都认为 foreach 是直接作用于数组本身,后来一些资料表明,它作用于数组的一个副本,那时我以为这就是真相了。但最近我又讨论了一下这件事,经过一些试验,发现我之前的想法并非完全正确。

 

让我来展示一下我的观点。下面的测试用例中我们将使用以下数组:

 

$array = array(1, 2, 3, 4, 5);

测试用例 1:

foreach ($array as $item) {
  echo "$item\n";
  $array[] = $item;
}
print_r($array);

/* 循环中输出:       1 2 3 4 5
   循环后的$array: 1 2 3 4 5 1 2 3 4 5 */

这很清晰的表明我们不直接使用数据源 - 否则循环会一直持续下去,因此我们可以在循环中不停的推送元素到数组中。为了保证正确请看下面的测试用例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值