Differenza tra var_dump, var_export e print_r


126

Qual'è la differenza tra var_dump, var_exporte print_r?


14
A volte è più facile chiedere a qualcun altro di capire meglio della lettura dei manuali.
Deepak Lamichhane,

11
Le risposte SO di Common Sense sono spesso più chiare, più concise, utilizzabili e sostanzialmente sempre più facili da consultare rispetto al manuale di PHP.
Mark Fox,

Risposte:


194

var_dump è a scopo di debug. var_dumpstampa sempre il risultato.

// var_dump(array('', false, 42, array('42')));
array(4) {
  [0]=> string(0) ""
  [1]=> bool(false)
  [2]=> int(42)
  [3]=> array(1) {[0]=>string(2) "42")}
}

print_r è anche a scopo di debug, ma non include il tipo di membro. È una buona idea usare se si conoscono i tipi di elementi nell'array, ma in caso contrario può essere fuorviante. print_rper impostazione predefinita stampa il risultato, ma consente invece di restituire come stringa utilizzando il$returnparametrofacoltativo.

Array (
    [0] =>
    [1] =>
    [2] => 42
    [3] => Array ([0] => 42)
)

var_export stampa un codice php valido. Utile se hai calcolato alcuni valori e desideri che i risultati siano una costante in un altro script. Si noti chevar_exportnon è possibile gestire cicli di riferimento / array ricorsivi, mentrevar_dumpeprint_rverificarli. var_exportper impostazione predefinita stampa il risultato, ma consente invece di restituire come stringa utilizzando il$returnparametrofacoltativo.

array (
  0 => '',
  1 => false,
  2 => 42,
  3 => array (0 => '42',),
)

Personalmente, penso che var_exportsia il miglior compromesso tra conciso e preciso.


51
Si noti che var_export, a causa della sua natura, morirà un'orribile morte ricorsiva su, bene, array ricorsivi. print_re var_dump(anche se non sono del tutto sicuro di quest'ultimo, dato che di solito non lo uso) non ho questo problema. Quindi non farlo var_export($_GLOBALS);, ad esempio (che contiene se stesso). :)
pinkgothic,

@ftrotter Ho sempre pensato che il commento spiegasse bene quella curiosità, ma ecco qua, ho aggiunto una breve nota alla risposta.
phihag

1
Va aggiunto che puoi fare in modo che print_r () e var_export () restituiscano una stringa invece di emetterla, mentre var_dump () non può farlo. Inoltre, non mi piace var_export () poiché è confuso: se provi a esportare una costante indefinita SOMECONST, ti verrà restituita una stringa di testo 'SOMECONST'. Quindi non dirà NULL, 0, "", ma supporrà effettivamente che sia una stringa (e suppongo che lanci anche un AVVISO).
userfuser

1
var_export è utile per rappresentare in modo sicuro una stringa, come la protezione quote / barra rovesciata.
dkellner,

1
Personalmente preferisco l' var_dumpoutput. Peccato che non consente di restituire l'output come stringa. Come tale posso fare riferimento al sentimento di @ iconoclast nel commento sopra. Ma dover scegliere var_exportsu var_dumpper questo caso d'uso è accettabile per me. Per completezza, notare questa richiesta di funzionalità correlata .
Paul van Leeuwen,

3

var_dumpe si var_exportriferiscono in questo modo (dal manuale )

var_export () ottiene informazioni strutturate sulla variabile data. È simile a var_dump () con un'eccezione: la rappresentazione restituita è un codice PHP valido.

Differiscono da print_rquello che var_dumpesporta più informazioni, come il tipo di dati e la dimensione degli elementi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.