Ich möchte die Ausgabe var_dump
eines Strings erfassen .
Die PHP-Dokumentation sagt;
Wie bei allem, was das Ergebnis direkt an den Browser ausgibt, können die Ausgabesteuerungsfunktionen verwendet werden, um die Ausgabe dieser Funktion zu erfassen und in einer Zeichenfolge zu speichern (zum Beispiel).
Was wäre ein Beispiel dafür, wie das funktionieren könnte?
print_r()
ist keine gültige Möglichkeit, da sie mir nicht die Informationen gibt, die ich brauche.
strip_tags()
werden einfach der Typ und der Wert zurückgegeben.Versuchen
var_export
Vielleicht möchten Sie auschecken
var_export
- obwohl es nicht die gleiche Ausgabevar_dump
liefert wie einen zweiten$return
Parameter, der dazu führt, dass es seine Ausgabe zurückgibt, anstatt sie zu drucken:Warum?
Ich bevorzuge diesen Einzeiler gegenüber
ob_start
undob_get_clean()
. Ich finde auch, dass die Ausgabe etwas einfacher zu lesen ist, da es sich nur um PHP-Code handelt.Der Unterschied zwischen
var_dump
undvar_export
besteht darin, dassvar_export
eine "analysierbare Zeichenfolgendarstellung einer Variablen" zurückgegeben wird, währendvar_dump
einfach Informationen über eine Variable ausgegeben werden. In der Praxis bedeutet dies, dassvar_export
Sie gültigen PHP-Code erhalten (möglicherweise jedoch nicht so viele Informationen über die Variable erhalten, insbesondere wenn Sie mit Ressourcen arbeiten ).Demo:
Der Unterschied in der Leistung:
var_export (
$debug_export
im obigen Beispiel):var_dump (
$debug_dump
im obigen Beispiel):print_r (
$debug_printr
im obigen Beispiel):Vorsichtsmaßnahme:
var_export
Behandelt keine ZirkelverweiseWenn Sie versuchen, eine Variable mit Zirkelverweisen zu sichern, führt der Aufruf
var_export
zu einer PHP-Warnung:Ergebnisse in:
Beide
var_dump
und gebenprint_r
andererseits die Zeichenfolge aus,*RECURSION*
wenn auf Zirkelverweise gestoßen wird.quelle
int(1)
aufrufen , wird diese gedruckt, während var_export nur gedruckt wird1
.var_export
ist eigentlich nicht besser zum Debuggen, weil Sie keine Browsersuche nach(int)
oder (Zeichenfolge) `usw. durchführen konnten. Außerdem werden viele Informationen auf kleinem Raum zusammengefasst. Versuchen Sie einfach :var_export(''); var_export('\'');
. Und vor allem : Machen Sie sich bereit für einen schwerwiegenden PHP-Fehler: Verschachtelungsebene zu tief - rekursive Abhängigkeit? in C: \ path \ file.php in Zeile 75Sie können dies auch tun:
quelle
print_r
wo ich kann, aber leider liefert es manchmal nicht genug Informationen. Zum Beispiel, da es in eine Zeichenfolge umgewandelt wird, wo es kann, beidefalse
undnull
als leere Zeichenfolge angezeigt. In Fällen, in denen mir der Unterschied zwischen diesen wichtig ist, würde ich widerwillig aufvar_dump
oder zurückgreifenvar_export
.Sie können auch versuchen, die
serialize()
Funktion zu verwenden. Manchmal ist es sehr nützlich für Debugging-Zwecke.quelle
error_log
, sollten Sie diese Lösung nicht verwenden, da die Ausgabe von serialize Null-Bytes enthalten underror_log
Zeichenfolgen mit Null-Bytes abschneiden kann .quelle
Auch
echo json_encode($dataobject);
könnte hilfreich sein ,quelle
json_encode
jedenvar_dump
Fall werden nicht alle Daten enthalten (z. B. als Variablentypen).json_encode
gibt die gleichen Informationen ausprint_R
, nur in unterschiedlichem Format.var_dump
. Er erklärte auch, dassprint_R
es nicht genügend Informationen für seine Bedürfnisse gibt. Es gibt keinen wirklichen Unterschied in den Informationen, die vonjson_encode
und bereitgestellt werdenprint_r
- nur das Datenformat ist unterschiedlich. Wenn diesprint_r
nicht ausreicht, ist dies auch der Falljson_encode
. Bitte beschweren Sie sich nicht mehr über die Ablehnung. Es war offensichtlich nicht nur ein zufälliger Klick, also kümmere dich darum.Aus dem PHP-Handbuch :
Hier ist also die echte Rückgabeversion von PHPs
var_dump()
, die tatsächlich eine Argumentliste mit variabler Länge akzeptiert:quelle
$argc
Überprüfung hier ist unnötig und wohl falsch, wie von @hanshenrik hervorgehoben, und sobald Sie das wegnehmen, fügen Sie nur noch diecall_user_func_array
undfunc_get_args
-Aufrufe hinzu.Wenn Sie sich zur Laufzeit den Inhalt einer Variablen ansehen möchten, sollten Sie einen echten Debugger wie XDebug verwenden. Auf diese Weise müssen Sie Ihren Quellcode nicht durcheinander bringen und können einen Debugger verwenden, auch wenn normale Benutzer Ihre Anwendung besuchen. Sie werden es nicht bemerken.
quelle
Hier ist die Komplettlösung als Funktion:
quelle
Dies ist vielleicht ein bisschen vom Thema entfernt.
Ich suchte nach einer Möglichkeit, diese Art von Informationen in das Docker-Protokoll meines PHP-FPM-Containers zu schreiben, und fand das folgende Snippet. Ich bin sicher, dass dies von Docker PHP-FPM-Benutzern verwendet werden kann.
quelle
file_put_contents('php://stdout',var_export($object, true),FILE_APPEND);
Ich mag
var_dump()
die ausführliche Ausgabe sehr und war mit der Ausgabe von oder nicht zufriedenvar_export()
,print_r()
weil sie nicht so viele Informationen lieferte (z. B. fehlender Datentyp, fehlende Länge).Um sicheren und vorhersehbaren Code zu schreiben, ist es manchmal nützlich, zwischen einer leeren Zeichenfolge und einer Null zu unterscheiden. Oder zwischen einer 1 und einer wahren. Oder zwischen null und falsch. Also möchte ich meinen Datentyp in der Ausgabe haben.
Obwohl hilfreich, habe ich in den vorhandenen Antworten keine saubere und einfache Lösung gefunden, um die farbige Ausgabe von
var_dump()
in eine für Menschen lesbare Ausgabe in eine Zeichenfolge ohne die HTML-Tags und mit allen Details von umzuwandelnvar_dump()
.Beachten Sie, dass wenn Sie eine Farbe haben
var_dump()
, dies bedeutet, dass Sie Xdebug installiert haben, das die Standardeinstellungvar_dump()
von PHP zum Hinzufügen von HTML-Farben überschreibt .Aus diesem Grund habe ich diese kleine Variation erstellt, die genau das bietet, was ich brauche:
Gibt die folgende schöne Zeichenfolge zurück:
Hoffe es hilft jemandem.
quelle
Von http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html :
ob_get_clean () kann nur die zuletzt in den internen Puffer eingegebenen Daten löschen. Die Methode ob_get_contents ist daher nützlich, wenn Sie mehrere Einträge haben.
Aus derselben Quelle wie oben:
quelle
Lange Schnur : Verwenden Sie einfach
echo($var);
anstelle vondump($var);
.Objekt oder Array :
var_dump('<pre>'.json_encode($var).'</pre>);'
quelle