Nikić affermato nel another thread:Perché foreach aumenta il conteggio di 2 invece di 1?
Poco prima [a foreach] iterazione
$array
è "soft copiato" per l'uso in foreach. Ciò significa che nessuna copia attuale è fatto, ma solo la refcount del zval di$array
è aumentato a 2.
Tuttavia, il mio codice di prova sta mostrando un risultato diverso:
$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?
Semplicemente guardando il codice, possiamo vedere al massimo due variabili di array.
Perché il conto 3
?
Perché non viene effettuato il conto 2
dopo l'esecuzione di foreach
?
Nel ciclo foreach non dovresti fare riferimento all'elemento dell'array usando la variabile $ value? – Crackertastic
@Crackertastic, non sto usando nessuna variabile all'interno del ciclo. – Pacerier
Ricevo 'refcount' 2, mi manca qualcosa? 'array: (refcount = 2, is_ref = 0) = array (0 => (refcount = 1, is_ref = 0) = 0, 1 => (refcount = 1, is_ref = 0) = 1, 2 => (conteggio = 2, is_ref = 0) = 2) ' – vee