var_export()
La funzione var_export() in PHP restituisce una rappresentazione della variabile come codice PHP valido, utile per cache e debug.
Introduzione
var_export() è una funzione PHP integrata che produce una rappresentazione di una variabile come codice PHP valido. A differenza di un semplice print, la string che restituisce è analizzabile: puoi copiarla in un file .php (o passarla a eval()) e ottenere un valore identico. Questo la rende ideale per:
- Generare file di configurazione o dati in cache — scrivi l'export su disco e usa
requirein seguito. - Ispezionare la struttura esatta di una variabile durante il debug.
- Acquisire istantanee di valori attesi nei test e nella documentazione.
Questa pagina tratta la sintassi, il flag $return, come viene rappresentato ogni tipo di dato e le differenze tra var_export(), var_dump() e print_r().
Sintassi
var_export(mixed $value, bool $return = false): ?string| Parametro | Descrizione |
|---|---|
$value | La variabile o espressione da esportare. |
$return | Quando è false (predefinito), la rappresentazione viene stampata direttamente e la funzione restituisce null. Quando è true, la rappresentazione viene restituita come string invece di essere stampata. |
L'errore più comune è dimenticare il secondo argomento: $result = var_export($x); lascia $result a null perché l'output è andato direttamente allo stdout. Per catturarlo, passa true.
Esempio di base
Qui $var1 è un intero, $var2 una string e $array un array indicizzato. Ogni chiamata restituisce una string che è essa stessa PHP valido:
10
'Hello, world!'
array (
0 => 'apple',
1 => 'banana',
2 => 'cherry',
)Nota che le stringhe sono racchiuse tra virgolette singole e gli array mantengono le chiavi esplicite — l'output di un array potrebbe essere assegnato direttamente a una variabile.
Come viene rappresentato ogni tipo
<?php
var_export(true); echo "\n"; // true
var_export(null); echo "\n"; // NULL
var_export(3.14); echo "\n"; // 3.14
var_export('a'); echo "\n"; // 'a'
$assoc = ['name' => 'Ann', 'age' => 30];
var_export($assoc); echo "\n";
?>Output:
true
NULL
3.14
'a'
array (
'name' => 'Ann',
'age' => 30,
)I booleani diventano true/false, null diventa NULL maiuscolo e gli array associativi preservano le loro chiavi string — tutto sintatticamente PHP valido.
Esportazione di oggetti
Per gli oggetti, var_export() emette una chiamata a __set_state() in modo che la struttura possa, in linea di principio, essere ricostruita:
<?php
class Point {
public int $x = 1;
public int $y = 2;
}
var_export(new Point());
?>\Point::__set_state(array(
'x' => 1,
'y' => 2,
))Per ricostruire effettivamente un tale oggetto dall'export, la classe deve definire un metodo statico __set_state(). Senza di esso, la valutazione dell'output genera un errore — quindi per il round-trip degli oggetti, serialize() è solitamente più adatto.
var_export() vs. var_dump() vs. print_r()
| Funzione | Formato output | Mostra i tipi? | String restituibile? | PHP valido? |
|---|---|---|---|---|
var_export() | Codice PHP analizzabile | Implicitamente | Sì ($return = true) | Sì |
var_dump() | Tipo + valore + lunghezza | Sì (esplicito) | No (solo stampa) | No |
print_r() | Albero leggibile dall'utente | No | Sì (2° argomento) | No |
Usa var_export() quando hai bisogno di codice da memorizzare o rieseguire, var_dump() quando hai bisogno di tipi e lunghezze di stringhe per il debug, e print_r() per una rapida occhiata leggibile.
Un uso pratico: file di dati in cache
Poiché l'export è PHP valido, puoi persistere dati calcolati e caricarli rapidamente alla richiesta successiva:
<?php
$config = ['debug' => true, 'level' => 3, 'tags' => ['a', 'b']];
// Write a loadable PHP file.
file_put_contents('cache.php', '<?php return ' . var_export($config, true) . ';');
// Later, somewhere else:
$loaded = require 'cache.php';
?>$loaded è identico all'array $config originale — nessuna analisi di JSON o passaggio di deserializzazione richiesto.
Conclusione
var_export() trasforma una variabile in codice PHP pronto all'uso. Passa $return = true per catturare quel codice come string, ricorda che null viene stampato come NULL e le stringhe sono tra virgolette singole, e usa serialize() quando hai bisogno di round-trip degli oggetti. Per il debug con informazioni sui tipi, confrontala con var_dump() e print_r().