Unterschied zwischen var_dump, var_export & print_r

126

Was ist der Unterschied zwischen var_dump, var_exportund print_r?

Manish Trivedi
quelle
14
Manchmal ist es einfacher, jemanden zu bitten, besser zu verstehen, als Handbücher zu lesen.
Deepak Lamichhane
11
@ Ihre Common Sense SO-Antworten sind oft klarer, prägnanter, umsetzbarer und im Grunde immer leichter zu referenzieren als das PHP-Handbuch.
Mark Fox

Antworten:

193

var_dump dient zum Debuggen. var_dumpdruckt immer das Ergebnis.

// 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 dient auch zu Debugging-Zwecken, enthält jedoch nicht den Typ des Mitglieds. Es ist eine gute Idee, wenn Sie die Arten von Elementen in Ihrem Array kennen, aber ansonsten irreführend sein können. print_rStandardmäßig wird das Ergebnis gedruckt, es kann jedoch stattdessen mithilfe des optionalen$returnParametersals Zeichenfolge zurückgegebenwerden.

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

var_export druckt einen gültigen PHP-Code. Nützlich, wenn Sie einige Werte berechnet haben und die Ergebnisse als Konstante in einem anderen Skript anzeigen möchten. Beachten Sie, dassvar_exportReferenzzyklen / rekursive Arrays nicht verarbeitet werden können,var_dumpundprint_rüberprüfen Sie diese. var_exportStandardmäßig wird das Ergebnis gedruckt, es kann jedoch stattdessen mithilfe des optionalen$returnParametersals Zeichenfolge zurückgegebenwerden.

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

Persönlich denke ich, var_exportist der beste Kompromiss zwischen prägnant und präzise.

Phihag
quelle
51
Beachten Sie, dass var_exportaufgrund seiner Natur ein schrecklicher rekursiver Tod auf rekursiven Arrays sterben wird. print_rund var_dump(obwohl ich mir bei letzterem nicht ganz sicher bin, da ich es normalerweise nicht benutze) habe dieses Problem nicht. Also var_export($_GLOBALS);zum Beispiel nicht (was sich selbst enthält). :)
pinkgothic
@ftrotter Ich dachte immer, der Kommentar würde diese Neugier gut erklären, aber los geht's, fügte der Antwort eine kurze Notiz hinzu.
Phihag
1
Es sollte hinzugefügt werden, dass Sie print_r () und var_export () veranlassen können, einen String zurückzugeben, anstatt ihn auszugeben, während var_dump () dies nicht kann. Außerdem mag ich var_export () nicht, da es verwirrend ist. Wenn Sie versuchen, eine undefinierte Konstante SOMECONST zu exportieren, erhalten Sie einfach eine Textzeichenfolge 'SOMECONST' zurück. Es wird also nicht NULL, 0, "" sagen, aber es wird tatsächlich davon ausgegangen, dass es sich um eine Zeichenfolge handelt (und ich nehme an, wirf auch einen HINWEIS).
Userfuser
1
var_export ist gut geeignet, um eine Zeichenfolge sicher darzustellen, z. B. den Anführungszeichen- / Backslash-Schutz.
dkellner
1
Persönlich bevorzuge ich var_dumpAusgabe. Schade, dass die Ausgabe nicht als Zeichenfolge zurückgegeben werden kann. Als solches kann ich mich im obigen Kommentar auf das Gefühl von @ iconoclast beziehen. Aber mit wählen , var_exportüber var_dumpfür diesen Anwendungsfall ist akzeptabel für mich. Beachten Sie der Vollständigkeit halber diese entsprechende Funktionsanforderung .
Paul van Leeuwen
3

var_dumpund var_exportbeziehen sich so (aus dem Handbuch )

var_export () erhält strukturierte Informationen über die angegebene Variable. Es ähnelt var_dump () mit einer Ausnahme: Die zurückgegebene Darstellung ist gültiger PHP-Code.

Sie unterscheiden sich davon, print_rdass var_dumpmehr Informationen wie der Datentyp und die Größe der Elemente exportiert werden.

Nanne
quelle