W3docs

var_dump()

La funzione var_dump() in PHP visualizza informazioni strutturate su una variabile, inclusi tipo, lunghezza e valore.

Introduzione

var_dump() è una funzione di debugging integrata in PHP che stampa informazioni strutturate su una o più variabili — inclusi tipo, lunghezza e contenuto di ogni valore — direttamente nell'output. A differenza di echo, che stampa solo un valore, var_dump() mostra esattamente che tipo di valore si sta osservando, il che la rende il modo più rapido per rispondere a "perché questo non funziona?" durante lo sviluppo.

Questa pagina tratta la sintassi, come viene rappresentato ogni tipo PHP, come lavorare con array e oggetti, le differenze rispetto a funzioni correlate come print_r() e var_export(), e le insidie da tenere a mente.

Sintassi

var_dump(mixed $value, mixed ...$values): void
  • $value — la variabile o espressione da ispezionare.
  • ...$values — un numero qualsiasi di valori aggiuntivi; ognuno viene esaminato in ordine.
  • Valore restituito: nessuno (void). var_dump() scrive direttamente nell'output e non restituisce nulla da assegnare.

Esempio di base

php— editable, runs on the server

Qui $var1 è un intero, $var2 una stringa e $array un array. L'output riporta il tipo e il valore di ciascuno:

int(10)
string(13) "Hello, world!"
array(3) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(6) "banana"
  [2]=>
  string(6) "cherry"
}

Leggi attentamente l'output — contiene più dettagli di quanto echo fornirebbe:

  • int(10) — il valore è l'intero 10.
  • string(13) "Hello, world!" — una stringa lunga 13 byte. Vedere la lunghezza è utile per individuare spazi nascosti o problemi di codifica.
  • Per l'array, ogni riga [chiave]=> mostra la chiave, quindi il tipo e il valore dell'elemento sottostante.

Come viene rappresentato ogni tipo

var_dump() formatta ogni tipo scalare in modo diverso, ed è per questo che è più informativa rispetto alla stampa di un valore. La tabella riassume la notazione:

Tipo PHPEsempio di output
integerint(42)
floatfloat(3.14)
stringstring(5) "hello"
booleanbool(true)
nullNULL
arrayarray(2) { ... }
objectobject(ClassName)#1 (2) { ... }

I casi boolean e NULL sono quelli su cui gli sviluppatori fanno più affidamento. echo true stampa 1 e echo false / echo null non stampano nulla, quindi è impossibile distinguere false, null e "" con echo — ma var_dump() li mostra chiaramente:

<?php
var_dump(true);
var_dump(false);
var_dump(null);
var_dump("");
var_dump(0);
var_dump("0");
?>
bool(true)
bool(false)
NULL
string(0) ""
int(0)
string(1) "0"

Nota come var_dump() distingua l'intero 0 dalla stringa "0" — una distinzione che causa silenziosamente bug nei confronti non rigidi. Consulta PHP Data Types e gettype() per ulteriori informazioni sul controllo dei tipi.

Dump di oggetti e strutture annidate

var_dump() ricorre in modo ricorsivo negli oggetti e negli array annidati, mostrando la visibilità (public / protected / private) per ogni proprietà:

<?php
class User {
    public string $name = "Ada";
    protected int $age = 36;
    private array $roles = ["admin", "editor"];
}

var_dump(new User());
?>
object(User)#1 (3) {
  ["name"]=>
  string(3) "Ada"
  ["age":protected]=>
  int(36)
  ["roles":"User":private]=>
  array(2) {
    [0]=>
    string(5) "admin"
    [1]=>
    string(6) "editor"
  }
}

#1 è l'id interno dell'istanza dell'oggetto, e (3) è il numero di proprietà.

Dump di più valori contemporaneamente

Poiché var_dump() è variadic, puoi ispezionare più variabili in una singola chiamata invece di scrivere una riga per variabile:

<?php
$id    = 7;
$name  = "Grace";
$active = true;

var_dump($id, $name, $active);
?>
int(7)
string(5) "Grace"
bool(true)

var_dump() vs. print_r() vs. var_export()

Queste tre funzioni si sovrappongono, quindi scegliere quella giusta è importante:

FunzioneMostra i tipi?L'output è PHP valido?Ideale per
var_dump()NoDebugging — massimo dettaglio
print_r()NoNoUna visualizzazione leggibile e chiara
var_export()NoGenerare codice / dump di configurazione

Usa var_dump() quando hai bisogno di vedere tipi e lunghezze esatti. Ricorri a print_r() quando vuoi solo uno sguardo rapido e meno rumoroso alla struttura di un array, e a var_export() quando vuoi un output che puoi incollare nel codice sorgente.

Catturare l'output come stringa

var_dump() non restituisce nulla, quindi non puoi fare $x = var_dump($y). Per catturare il suo output (per il logging, ad esempio), avvolgilo nel buffering dell'output:

<?php
$data = ["status" => 200, "ok" => true];

ob_start();
var_dump($data);
$dump = ob_get_clean();

// $dump now holds the var_dump output as a string
echo strlen($dump) . " characters captured\n";
?>

Note e insidie

  • Destinazione dell'output. var_dump() scrive sull'output standard. Eseguito in un browser, il PHP moderno avvolge il dump in tag <pre> così la struttura è leggibile; da CLI stampa testo semplice.
  • I dump dimenticati vanno in produzione. Un var_dump() lasciato accidentalmente nel codice farà trapelare dati interni agli utenti. Rimuovi i dump di debug prima di fare il deploy, oppure proteggili con un flag di debug.
  • Le stringhe mostrano la lunghezza in byte, non il numero di caratteri. string(13) conta i byte; una stringa multibyte (UTF-8) può riportare un numero maggiore rispetto al conteggio dei caratteri visibili.
  • Usa Xdebug per un output più leggibile. Con l'estensione Xdebug installata, var_dump() viene automaticamente sovraccaricata per produrre un output colorato e con profondità limitata, molto più facile da leggere.

Conclusione

var_dump() è la funzione di riferimento per ispezionare cosa sia effettivamente un valore durante lo sviluppo PHP. Rivela tipo, lunghezza, struttura e visibilità in una sola chiamata — un livello di dettaglio che il semplice echo o print nasconde. Ricorri a print_r() quando vuoi una lettura più pulita di un array e a var_export() quando hai bisogno di codice PHP riutilizzabile, ma per un'analisi di debugging grezza var_dump() è difficile da battere.

Esercitazione

Pratica
Qual è lo scopo della funzione var_dump() in PHP?
Qual è lo scopo della funzione var_dump() in PHP?
Was this page helpful?