var_export()
Die Funktion var_export() gibt eine parsierbare PHP-Code-Darstellung einer Variablen aus oder gibt sie zurück.
Einführung
var_export() ist eine eingebaute PHP-Funktion, die eine gültige PHP-Code-Darstellung einer Variablen erzeugt. Anders als ein einfaches print ist die zurückgegebene Zeichenkette parsierbar: Man könnte sie in eine .php-Datei kopieren (oder an eval() übergeben) und erhält einen identischen Wert. Das macht sie ideal für:
- Generierung von gecachten Konfigurations- oder Datendateien — den Export auf Disk schreiben und später per
requireladen. - Untersuchung der genauen Struktur einer Variablen beim Debuggen.
- Erfassen von Erwartungswerten in Tests und Dokumentation.
Diese Seite behandelt die Syntax, das $return-Flag, die Darstellung der einzelnen Datentypen sowie die Unterschiede zwischen var_export(), var_dump() und print_r().
Syntax
var_export(mixed $value, bool $return = false): ?string| Parameter | Beschreibung |
|---|---|
$value | Die Variable oder der Ausdruck, der exportiert werden soll. |
$return | Bei false (Standard) wird die Darstellung direkt ausgegeben und die Funktion gibt null zurück. Bei true wird die Darstellung als Zeichenkette zurückgegeben, anstatt ausgegeben zu werden. |
Der häufigste Fehler ist das Vergessen des zweiten Arguments: $result = var_export($x); lässt $result als null, da die Ausgabe direkt nach stdout ging. Um sie aufzufangen, muss true übergeben werden.
Einfaches Beispiel
Hier ist $var1 ein Integer, $var2 eine Zeichenkette und $array ein indiziertes Array. Jeder Aufruf gibt eine Zeichenkette zurück, die selbst gültiges PHP ist:
10
'Hello, world!'
array (
0 => 'apple',
1 => 'banana',
2 => 'cherry',
)Zu beachten ist, dass Zeichenketten in einfache Anführungszeichen eingeschlossen und Array-Schlüssel explizit ausgegeben werden — die Ausgabe eines Arrays könnte direkt einer Variablen zugewiesen werden.
Darstellung der einzelnen Typen
<?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";
?>Ausgabe:
true
NULL
3.14
'a'
array (
'name' => 'Ann',
'age' => 30,
)Boolesche Werte werden zu true/false, null wird zum Großbuchstaben NULL, und assoziative Arrays behalten ihre Zeichenkettenschlüssel — alles syntaktisch gültiges PHP.
Objekte exportieren
Bei Objekten gibt var_export() einen __set_state()-Aufruf aus, damit die Struktur grundsätzlich wiederhergestellt werden kann:
<?php
class Point {
public int $x = 1;
public int $y = 2;
}
var_export(new Point());
?>\Point::__set_state(array(
'x' => 1,
'y' => 2,
))Um ein Objekt aus dem Export tatsächlich wiederherzustellen, muss die Klasse eine statische __set_state()-Methode definieren. Ohne sie wirft die Auswertung der Ausgabe einen Fehler — für das Hin- und Zurückkonvertieren von Objekten ist daher serialize() meist die bessere Wahl.
var_export() vs. var_dump() vs. print_r()
| Funktion | Ausgabeformat | Zeigt Typen? | Als Zeichenkette rückgebbar? | Gültiges PHP? |
|---|---|---|---|---|
var_export() | Parsierbarer PHP-Code | Implizit | Ja ($return = true) | Ja |
var_dump() | Typ + Wert + Länge | Ja (explizit) | Nein (nur Ausgabe) | Nein |
print_r() | Menschenlesbare Baumstruktur | Nein | Ja (2. Argument) | Nein |
var_export() wird verwendet, wenn Code gespeichert oder erneut ausgeführt werden soll, var_dump() wenn Typen und Zeichenkettenlängen zum Debuggen benötigt werden, und print_r() für einen schnellen lesbaren Überblick.
Praktischer Einsatz: gecachte Datendateien
Da der Export gültiges PHP ist, können berechnete Daten dauerhaft gespeichert und beim nächsten Aufruf schnell geladen werden:
<?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 ist identisch mit dem ursprünglichen $config-Array — kein Parsen von JSON oder ein Unserialize-Schritt erforderlich.
Fazit
var_export() wandelt eine Variable in ausführbaren PHP-Code um. Mit $return = true wird dieser Code als Zeichenkette erfasst. Zu beachten ist, dass null als NULL ausgegeben wird und Zeichenketten in einfache Anführungszeichen eingeschlossen sind. Für das Hin- und Zurückkonvertieren von Objekten sollte stattdessen serialize() verwendet werden. Für typbewusstes Debuggen bietet sich ein Vergleich mit var_dump() und print_r() an.