Nikić stwierdzono w another thread:Dlaczego foreach zwiększa refcount o 2 zamiast 1?
Tuż przed [foreach] iteracja w
$array
jest "miękki skopiowane" na stosowania w foreach. Oznacza to, że żadna rzeczywista kopia jest wykonywana, ale tylko RefCount z zval z$array
wzrasta do 2.
Jednak mój kod badanie 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?
Wystarczy patrząc na kod, widzimy najwyżej dwie zmienne tablicowe.
Dlaczego jest refcount 3
?
Dlaczego po foreach
nie jest przeprowadzany przelicznik 2
?
W swojej pętli foreach nie powinieneś odwoływać się do elementu tablicy za pomocą zmiennej $ value? – Crackertastic
@Crackertastic, nie używam żadnych zmiennych w pętli. – Pacerier
Otrzymuję 'refcount' 2, czy czegoś brakuje? 'array: (refcount = 2, is_ref = 0) = array (0 => (refcount = 1, is_ref = 0) = 0, 1 => (refcount = 1, is_ref = 0) = 1, 2 => (refcount = 2, is_ref = 0) = 2) ' – vee