为什么在PHP 7中current()不能与foreach()一起使用?

时间:2019-01-02 15:55:48

标签: php arrays

我正在尝试理解此代码:

$array = [0, 1, 2];
foreach ($array as &$val) {
    var_dump(current($array));
}

在PHP 5.6中,结果将为int(1) int(2) bool(false),在PHP 7中,结果将为int(0) int(0) int(0)。问题是为什么?

为什么在两种情况下结果都不为数组0, 1, 2的值?我知道PHP中的current()返回当前值,因此每次foreach遍历每个值时,不是应该打印出当前值吗?

1 个答案:

答案 0 :(得分:4)

foreach的实现在PHP 7.0中已更改为described in this migration note

  

在PHP 7之前,内部数组指针在使用foreach迭代数组时进行了修改。情况不再如此。

current()函数返回“内部数组指针”所指向的元素,“内部数组指针”来自旧版本的PHP,在现代代码中很少使用。可以将其用作the each() function的替代循环机制,该机制已在PHP 7.2中弃用。

在旧版本的PHP中,each()foreach都更改了此“内部数组指针”,因此您可以混合使用foreachcurrent,如示例所示。但是,这意味着内部代码在某些情况下会不必要地变得复杂且缓慢,因此在PHP 7.0中对其进行了更改。现在,foreach以不同的方式跟踪其在数组中的位置,current()无法读取。