W3docs

debug_zval_dump()

La funzione debug_zval_dump() è una funzione integrata di PHP che fornisce informazioni sulla rappresentazione interna di una variabile PHP.

Introduzione

La funzione debug_zval_dump() è una funzione integrata di PHP che stampa la rappresentazione interna di una variabile così come il motore Zend la memorizza — non solo il suo valore, ma anche il suo contatore di riferimenti (refcount) e se si tratta di un riferimento (is_ref). Questo la rende una finestra nella gestione della memoria di PHP, in particolare nell'ottimizzazione copy-on-write.

Un zval ("valore Zend") è il contenitore a livello C che PHP utilizza per ogni variabile. Più nomi di variabili possono puntare allo stesso zval sottostante; PHP esegue una copia fisica solo quando uno di essi viene modificato. debug_zval_dump() consente di osservare questa contabilità interna.

Deprecata e rimossa. Questa funzione è stata deprecata in PHP 7.2 e rimossa in PHP 8.0. Funziona solo su versioni legacy di PHP (fino alla 7.4). Su PHP 8+ non esiste — consulta Alternative moderne prima di utilizzarla.

Se vuoi semplicemente ispezionare il tipo e il valore di una variabile, usa invece var_dump() — funziona su ogni versione di PHP ed è lo strumento di debug quotidiano.

Sintassi

La sintassi della funzione debug_zval_dump() è la seguente:

Sintassi PHP di debug_zval_dump()

void debug_zval_dump(mixed $variable, mixed ...$rest): void

La funzione accetta una o più variabili e stampa la rappresentazione interna di ciascuna. Non restituisce nulla (void) — scrive direttamente nel flusso di output. Ogni riga di output segue il pattern:

type(value) refcount(N)
  • type(value) — la stessa notazione tipo/valore usata da var_dump(), ad es. string(5) "hello", int(42).
  • refcount(N) — quanti handle zval puntano attualmente a questo valore. Quando is_ref è impostato, l'output stampa anche is_ref=true.

Esempio di utilizzo

Ecco un esempio di come utilizzare la funzione debug_zval_dump() in PHP:

Esempio di PHP debug_zval_dump()

php— editable, runs on the server

Qui $b è legato per riferimento a $a, quindi entrambi i nomi condividono uno zval contrassegnato come riferimento. Chiamare debug_zval_dump() su entrambi stampa lo stesso valore interno:

string(5) "hello" refcount(3)
string(5) "hello" refcount(3)

Perché refcount è 3 e non 2. Ci si potrebbe aspettare 2 (per $a e $b). Il conteggio extra deriva da debug_zval_dump() stessa: passare la variabile nella funzione aggiunge temporaneamente un handle in più allo zval, che viene contato prima che il valore venga stampato. Questo disallineamento di uno è una stranezza nota — leggi il conteggio stampato rispetto a un valore di riferimento anziché come verità assoluta.

Osservare il copy-on-write

L'uso più istruttivo è osservare come PHP condivide e poi separa un valore. Le variabili ordinarie (non riferimento) condividono uno zval finché una non viene scritta:

<?php
$a = "hello";
debug_zval_dump($a);   // refcount(2): $a + the function argument

$b = $a;               // no copy yet — $a and $b share one zval
debug_zval_dump($a);   // refcount(3): $a, $b, and the argument

$b = "world";          // write triggers the copy ("copy-on-write")
debug_zval_dump($a);   // back to refcount(2): $b now has its own zval
?>

Il refcount che sale quando si assegna e scende quando si modifica una copia è il copy-on-write in azione — PHP ha evitato di duplicare la stringa "hello" finché non è stato strettamente necessario.

Conclusione

La funzione debug_zval_dump() è stata storicamente utile per ispezionare i contatori di riferimenti e il comportamento copy-on-write del motore Zend. Stampa il tipo, il valore e lo stato refcount/is_ref di una variabile, aiutando gli sviluppatori a capire quando PHP copia effettivamente i dati. Oggi è principalmente di interesse educativo, poiché è stata rimossa da PHP 8+.

Alternative moderne

Poiché debug_zval_dump() non è disponibile su PHP 8+, usa queste alternative:

  • var_dump() — la scelta standard per ispezionare tipo e valore di qualsiasi variabile. Usala per il debug quotidiano.
  • print_r() — output leggibile per array e object, opzionalmente restituito come string.
  • var_export() — produce una rappresentazione in codice PHP valido che puoi incollare nel sorgente.
  • gettype() — quando hai bisogno solo del nome del tipo di una variabile.
  • xdebug_debug_zval() — il sostituto più fedele per l'ispezione del refcount, disponibile quando l'estensione Xdebug è installata.

Practice

Pratica
Cosa fa la funzione debug_zval_dump() in PHP?
Cosa fa la funzione debug_zval_dump() in PHP?
Was this page helpful?