Why does foreach copy the array when we did not modify it in the loop?
In a blog post "PHP Internals: When does foreach copy", NikiC stated that
in a code like this:
Snippet 1
$array = range(0, 100000);
foreach ($array as $key => $value) {
// ...
}
foreach will not copy the array because the only thing that foreach
modifies about $array is it's internal array pointer.
He also stated that in a code like this:
Snippet 2
$array = range(0, 100000); // line 1
test($array);
function test($array) {
foreach ($array as $key => $value) { // line 4
// ...
}
}
foreach will copy the array because if it didn't, the $array variable in
line 1 would be changed.
However, the only thing that foreach modifies about $array is it's
internal array pointer. So why does it matter if the internal array
pointer of the $array variable in line 1 is changed? It didn't matter in
snippet 1, why does it matter snippet 2?
Why does foreach need to copy the array in snippet 2, even though we did
not modify it in the loop?
No comments:
Post a Comment