Dlaczego foreach zwiększa refcount o 2 zamiast 1?
NikiC stwierdził winny wątek:
Tuż przed [foreach] iteracją$array
jest „miękko kopiowany” do użycia w foreach. Oznacza to, że żadna rzeczywista kopia nie jest wykonywana, a jedynie przeliczenie zval na$array
jest zwiększona do 2.
Jednak mój kod testowy pokazuje inny wynik:
$array = array(0, 1, 2);
xdebug_debug_zval('array'); // refcount=1, is_ref=0
// so far so good
foreach ($array as $key => $value) {
xdebug_debug_zval('array'); // refcount=3, is_ref=0
} // why is refcount 3 instead of 2?
Patrząc na kod, możemy zobaczyć co najwyżej dwie zmienne tablicowe.
Dlaczego jest refcount3
?
Dlaczego nie jest refcount2
poforeach
prowadzony jest?