Différence entre var_dump, var_export et print_r

126

Quelle est la différence entre var_dump, var_exportet print_r?

Manish Trivedi
la source
14
Parfois, il est plus facile de demander à quelqu'un d'autre de mieux comprendre que de lire des manuels.
Deepak Lamichhane
11
@ Vos réponses Common Sense SO sont souvent plus claires, plus concises, exploitables et fondamentalement toujours plus faciles à consulter que le manuel PHP.
Mark Fox

Réponses:

194

var_dump sert à des fins de débogage. var_dumpimprime toujours le résultat.

// 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 sert également à des fins de débogage, mais n'inclut pas le type de membre. C'est une bonne idée à utiliser si vous connaissez les types d'éléments dans votre tableau, mais cela peut être trompeur dans le cas contraire. print_rpar défaut, imprime le résultat, mais autorise le retour sous forme de chaîne à la place en utilisant le$returnparamètrefacultatif.

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

var_export imprime un code php valide. Utile si vous avez calculé des valeurs et que vous souhaitez que les résultats soient une constante dans un autre script. Notez quevar_exportne peut pas gérer les cycles de référence / tableaux récursifs, alors quevar_dumpet lesprint_rvérifier. var_exportpar défaut, imprime le résultat, mais autorise le retour sous forme de chaîne à la place en utilisant le$returnparamètrefacultatif.

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

Personnellement, je pense que var_exportc'est le meilleur compromis entre concis et précis.

Phihag
la source
51
Notez que var_export, en raison de sa nature, mourra d'une horrible mort récursive sur, eh bien, des tableaux récursifs. print_ret var_dump(cependant, pas tout à fait sûr de ce dernier, puisque je ne l'utilise généralement pas) n'ont pas ce problème. Alors ne le faites pas var_export($_GLOBALS);, par exemple (qui se contient). :)
pinkgothic
@ftrotter J'ai toujours pensé que le commentaire expliquerait bien cette curiosité, mais voilà, a ajouté une petite note à la réponse.
phihag
1
Il faut ajouter que vous pouvez faire en sorte que print_r () et var_export () retournent une chaîne au lieu de la sortir, alors que var_dump () ne peut pas le faire. De plus, je n'aime pas var_export () car c'est déroutant - si vous essayez d'exporter une constante SOMECONST non définie, vous obtiendrez simplement une chaîne de texte 'SOMECONST'. Donc, il ne dira pas NULL, 0, "", mais il supposera en fait que c'est une chaîne (et je suppose qu'il jettera également un NOTICE).
userfuser
1
var_export est idéal pour représenter une chaîne en toute sécurité, comme la protection contre les guillemets / antislash.
dkellner
1
Personnellement, je préfère la var_dumpsortie. Dommage qu'il ne permette pas de renvoyer la sortie sous forme de chaîne. En tant que tel, je peux me rapporter au sentiment de @ iconoclast dans le commentaire ci-dessus. Mais avoir à choisir var_exportplus var_dumppour ce cas d'utilisation est acceptable pour moi. Par souci d'exhaustivité, notez cette demande de fonctionnalité associée .
Paul van Leeuwen
3

var_dumpet var_exportraconter comme ça (du manuel )

var_export () obtient des informations structurées sur la variable donnée. Il est similaire à var_dump () à une exception près: la représentation renvoyée est du code PHP valide.

Ils diffèrent de print_rcelui qui var_dumpexporte plus d'informations, comme le type de données et la taille des éléments.

Nanne
la source