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
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'intero10.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 PHP | Esempio di output |
|---|---|
| integer | int(42) |
| float | float(3.14) |
| string | string(5) "hello" |
| boolean | bool(true) |
| null | NULL |
| array | array(2) { ... } |
| object | object(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:
| Funzione | Mostra i tipi? | L'output è PHP valido? | Ideale per |
|---|---|---|---|
var_dump() | Sì | No | Debugging — massimo dettaglio |
print_r() | No | No | Una visualizzazione leggibile e chiara |
var_export() | No | Sì | Generare 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.