Proverò a dare un po 'più di luce alla funzione debug_zval_dump()
e al modo in cui elabori le tue variabili.Non uccidermi se sbaglio:) ...
$var = 1;
debug_zval_dump($var);
penso che la funzione di debug conta il $var
refcount (1) e il 1 refcount (2) dal 1 è il valore di $var
.
Se lo guardi logicamente, lo stai dicendo in realtà.
1 = 1;
debug_zval_dump(1);
Seconda parte:
$var = 1;
$var_dup = &$var;
debug_zval_dump($var);exit;
Quello che vedete qui è che si imposta $var
-$var_dup
ma sta tenendo il suo valore. Il valore di $var
è 1 perché è stato "collegato" a $var_dup
.
$var = 2;
$var_dup = &$var; //or $var = &$var_dup; (doesn't matter which one)
$var = 3;
debug_zval_dump($var_dup);exit;
Questo dà long(3) refcount(1)
... Perché è refcount 1? Come puoi vedere il valore di $ var_dup non è mai stato assegnato a 3, dovrebbe essere 2 giusto? No, non dovrebbe perché lo tenete aggiornato con & $ var. Ciò significa che quando hai superato $var = 4
tra $var = 3
e debug_zval_dump($var_dup);exit;
il valore di $ var_dup verrà aggiornato automaticamente perché li hai collegati, rendendolo un 1 refcount.
Poi c'è quest'altro evento:
$var = 2;
$var_dup = $var;
$var = 4;
debug_zval_dump($var_dup);exit;
L'uscita di questo è: long(2) refcount(2)
. Come puoi vedere il valore di $ var_dup è corretto. $ var era 2, il valore è stato passato a $ var_dup e ne è rimasto fedele. Il Refcount è 2 perché conta $var = 4;
e $var_dup = $var;
. Quando rimuoviamo il $var = 4;
otteniamo questo:
$var = 2;
$var_dup = $var;
debug_zval_dump($var_dup);exit;
L'uscita di questo è: long(2) refcount(3)
. Ora la funzione di debug conta quanto segue: $var_dup
(1), =$var
(2) (poiché $ var_dup era originato da $ var) e $var
(= 2;
) (3).
Spero che tu capisca cosa intendo. Secondo me, questo è più matematica che programmazione, quindi questa potrebbe essere la ragione per cui è una funzione difficile da capire.
E ancora, se mi sbaglio, non uccidermi:) ...
Saluti,
Mixxiphoid
responsabilità
non so quale sia lo scopo di questa funzione è . Non ne ho mai sentito parlare fino ad oggi. Quindi non sono responsabile per l'uso inappropriato :).
Risposta parola per parola all'indirizzo http://php.net/manual/en/function.debug-zval-dump.php#example-5193 – Pacerier