PHP中的foreach实际上是如何工作的?详细解析与示例
大家好!我已经用PHP写了几个月,但仍然不完全理解foreach是如何工作的。文档中说它是“遍历数组的便捷方式”,但我有一些找不到答案的问题。
例如,我知道使用带有引用的foreach(&$value)可以修改数组元素。但为什么循环结束后变量$value仍然引用最后一个元素?这会导致意外的bug。
我还感兴趣的是:底层发生了什么?每次foreach都会创建数组的副本吗?我听说PHP使用了copy-on-write机制,但我不明白这在循环上下文中是如何工作的。
下面是一个让我困惑的例子:
```php
$array = [1, 2, 3];
foreach ($array as &$value) {
$value *= 2;
}
// 现在 $array = [2, 4, 6]
// 但如果循环后执行:
foreach ($array as $value) {
echo $value;
}
// 结果:2 4 4 而不是 2 4 6!为什么?
```
我还注意到,在嵌套数组上使用foreach时