Mit var_export() kannst du beliebige Variablen so ausgeben, dass der zurückgegebene String direkt als PHP-Code wiederverwendbar ist – ein mächtiges Werkzeug, das weit über klassische Debug-Ausgaben hinausgeht.

Einleitung: Was ist PHP var_export() und warum ist es nützlich?
var_export() erzeugt eine PHP-Code-Repräsentation einer Variable. Du erhältst eine Zeichenkette, die du ohne Anpassung in ein PHP-Skript einfügen und sofort ausführen kannst. Besonders praktisch ist dieser Export, wenn du Konfigurationen abspeichern oder Testdaten direkt als PHP-Code hinterlegen möchtest.
Der größte Vorteil: Die Ausgabe von var_export() bleibt immer ausführbarer PHP-Code – anders als bei Debug-Funktionen wie var_dump() oder print_r(), die nur zur Analyse dienen.
zur Abgrenzung:
- var_dump() liefert ausführliche Informationen für Debug-Zwecke, aber kein gültiges PHP.
- print_r() ist menschenlesbar, aber nicht direkt nutzbar, um Werte zurückzuschreiben.
Syntax und Parameter von var_export()
string|null var_export(mixed $value, bool $return = false)
Parameter:
-
$value (mixed, erforderlich): Die Variable, die du exportieren möchtest.
Unterstützt: Integer, Float, Boolean, null, String, Arrays, Objekte (bei Klassen mit __set_state()), stdClass.
-
$return (bool, optional, Standard: false):
- false: Gibt die Ausgabe direkt aus, Rückgabewert ist null.
- true: Gibt den Export als String zurück (kein Echo).
Du brauchst $return = true, um das Ergebnis weiterzuverarbeiten (z.B. für Dateischreibvorgänge).
Rückgabewert von var_export()
- Bei $return = true: Rückgabe ist ein String mit valider PHP-Syntax.
- Bei $return = false: Rückgabewert ist null, die Ausgabe erfolgt direkt (an den Output-Stream, etwa Browser oder CLI).
Praxis: Willst du die Export-Ausgabe speichern, setze immer $return = true.
Grundlegende Anwendungsbeispiele (inklusive Output)
Im Alltag arbeitest du oft mit einfachen Werten wie Zahlen oder Zeichenketten – var_export() zeigt dir diese sofort im gültigen PHP-Format an, sodass du das Ergebnis problemlos in ein Skript einfügen kannst.
4.1. Export einfacher Datentypen
String
$sText = "Hallo\nWelt!";
var_export($sText);
Output:
'Hallo\nWelt!'
Erklärung: Sonderzeichen wie \n werden escaped – das Ergebnis bleibt gültiger PHP-Code.
Integer
$iZahl = 42;
var_export($iZahl);
Output:
42
Float
$fZahl = 3.1415;
var_export($fZahl);
Output:
3.1415
Boolean
$bWert = true;
var_export($bWert);
Output:
true
Null
$mNull = null;
var_export($mNull);
Output:
NULL
4.2. Die Macht des $return-Parameters
Der $return-Parameter entscheidet, ob var_export() das Ergebnis direkt ausgibt oder als String zurückliefert – so steuerst du flexibel, ob du den PHP-Code weiterverarbeiten oder nur anzeigen möchtest.
Direkte Ausgabe vs. Speicherung
$aTest = ['eins', 'zwei'];
var_export($aTest, false);
// direkt ausgegeben
$code = var_export($aTest, true);
// String gespeichert
echo $code;
// explizit ausgeben
Export in eine Datei
<?php
$aKonfig = ['host' => 'localhost', 'port' => 3306];
file_put_contents('config.php', '<?php return ' . var_export($aKonfig, true) . ';');
Jetzt kannst du später einfach include 'config.php'; verwenden, um das Array zu laden.
var_export() mit Arrays
Ob du mit einfachen Listen oder komplexen Schlüssel-Wert-Paaren arbeitest: var_export() gibt beide Array-Typen so aus, dass du sie direkt in deinen PHP-Code übernehmen kannst.
5.1. Numerische und assoziative Arrays
Einfaches Array
$aEinfach = [1, 2, 3];
echo var_export($aEinfach, true);
Output:
array (
0 => 1,
1 => 2,
2 => 3,
)
Assoziatives Array
$aAssoc = ['user' => 'Max', 'id' => 5];
echo var_export($aAssoc, true);
Output:
array (
'user' => 'Max',
'id' => 5,
)
5.2. Mehrdimensionale Arrays
Auch verschachtelte, mehrdimensionale Arrays exportiert var_export() zuverlässig in einer klar strukturierten PHP-Syntax – ideal, wenn du komplexe Datenbestände sichern oder weiterverarbeiten willst.
$aMulti = [
'users' => [
['name' => 'Tom'],
['name' => 'Anna']
],
'active' => true
];
echo var_export($aMulti, true);
Output (gekürzt):
array (
'users' =>
array (
0 =>
array (
'name' => 'Tom',
),
1 =>
array (
'name' => 'Anna',
),
),
'active' => true,
)
var_export() und Objekte: Der Umgang mit __set_state()
Damit var_export() ein Objekt als gültigen PHP-Code zurückgeben kann, muss die zugehörige Klasse eine spezielle Methode namens __set_state() implementieren – nur dann ist eine spätere Wiederherstellung des Objekts möglich.
6.1. Warum __set_state() benötigt wird
PHP exportiert Objekte mit var_export() in folgender Form:
ClassName::__set_state(array(...))
Die Klasse muss dafür eine statische Methode __set_state() implementieren.
6.2. Beispiel: Export eines Objekts mit __set_state()
class Demo
{
public $wert;
public static function __set_state($aProps) {
$obj = new self();
$obj->wert = $aProps['wert'];
return $obj;
}
}
$oDemo = new Demo();
$oDemo->wert = 'Beispiel';
$export = var_export($oDemo, true);
echo $export;
Output:
Demo::__set_state(array(
'wert' => 'Beispiel',
))
Du kannst so ein Objekt mit eval() oder durch Speichern/Laden wiederherstellen – aber eval nur mit vertrauenswürdigen Quellen nutzen!
6.3. Was passiert ohne __set_state()?
Fehlt die Methode in der Klasse, kann der Export zu einem Fatal Error führen – oder das Objekt wird nicht korrekt wiederhergestellt (abhängig von PHP-Version und Objekttyp).
6.4. Sonderfall stdClass
$oStd = new stdClass();
$oStd->x = 1;
echo var_export($oStd, true);
Output (je nach PHP-Version):
(stdClass::__set_state(array(
'x' => 1,
)))
Oder früher als
(object) array('x' => 1)
Wichtige Einschränkungen und Fallstricke von var_export()
Ressourcen wie Datenbankverbindungen oder Dateizeiger lassen sich nicht als gültigen PHP-Code exportieren – bei solchen Variablen erhältst du lediglich den Wert NULL statt einer verwertbaren Repräsentation.
7.1. Keine Unterstützung für Ressourcen
$handle = fopen(__FILE__, 'r');
echo var_export($handle, true);
Output:
NULL
Ressourcen wie Dateizeiger kann var_export() nicht exportieren.
7.2. Problem: Zirkuläre Referenzen (Rekursion)
$a = [];
$a['selbst'] =& $a;
echo var_export($a, true);
Fatal Error:
Nesting level too deep - recursive dependency?
Tipp: Prüfe komplexe Strukturen auf Referenzen, um das Debugging zu erleichtern. Für diese Fälle ist serialize() die bessere Wahl.
Sehr große Arrays oder Objekte können Speicher und Zeit beanspruchen. serialize() arbeitet meist effizienter, ist aber nicht menschenlesbar.
var_export() im Vergleich: Wann welche Funktion nutzen?
Während die eine Funktion PHP-Code zur Wiederverwendung liefert, zeigt die andere detaillierte Typinformationen für Debug-Zwecke an – wähle je nach Ziel zwischen Wiederverwertbarkeit und maximaler Transparenz.
8.1. var_export() vs. var_dump()
Funktion | Zielgruppe | Rückgabe/Output | Direkt als PHP nutzbar |
var_export() | Entwickler, System | PHP-Code als String/Output | Ja |
var_dump() | Entwickler | Typen + Werte, Debug-Info | Nein |
Beispiel:
$a = [1, 'x' => true];
var_export($a);
// Output: array ( 0 => 1, 'x' => true, )
var_dump($a);
// Output: array(2) { [0]=> int(1) ["x"]=> bool(true) }
8.2. var_export() vs. print_r()
Die eine Methode eignet sich zum Erzeugen von echtem PHP-Code für Entwickler, die andere bleibt auf menschlich lesbare Ausgaben beschränkt und taugt nicht für die direkte Wiederverwendung im Code.
Funktion | Zielgruppe | Rückgabe/Output | PHP-Code nutzbar |
var_export() | Entwickler, System | PHP-Code | Ja |
print_r() | Menschen | Lesbare Ausgabe | Nein |
8.3. var_export() vs. serialize() / json_encode()
Je nachdem, ob du menschenlesbaren PHP-Code, flexible Datenübertragung oder kompakten Austausch mit anderen Sprachen brauchst, spielt jede dieser Funktionen ihre eigenen Stärken und Schwächen aus.
Funktion | Ziel | Vorteil | Nachteil |
var_export() | PHP-Code speichern | Direkt als PHP nutzbar | Keine Ressourcen, zirkulär |
serialize() | Speichern/Übertragen | Schnell, flexibel | Nicht lesbar, nur PHP |
json_encode() | Austausch (JS etc.) | Kompakt, lesbar | Typenverluste, keine Objekte |
Cheat Sheet:
- Konfigurationsdatei für PHP: → var_export()
- Persistenz für PHP, auch mit Referenzen: → serialize()
- APIs, Web, JavaScript: → json_encode()
- Debug, Inspektion: → var_dump(), print_r()
Fortgeschrittene Anwendungsfälle und Best Practices
Mit der Funktion kannst du Konfigurationsdaten direkt als PHP-Code exportieren, was das spätere Einlesen besonders effizient und fehlertolerant macht – ein klarer Vorteil gegenüber Formaten wie JSON oder INI.
9.1. Generieren von Konfigurationsdateien
<?php
$aConfig = ['theme' => 'light', 'debug' => false];
file_put_contents('settings.php', '<?php return ' . var_export($aConfig, true) . ';');
Jetzt lädst du die Einstellungen einfach mit
$a = include 'settings.php';
9.2. Test-Fixtures/Mock-Daten
Mit var_export() kannst du komplexe Testdaten generieren, in PHP speichern und in Unit-Tests oder Dev-Umgebungen wiederverwenden.
9.3. Vorsicht bei eval() mit var_export()
Niemals unkontrolliert eval(var_export(...)) auf Daten aus unbekannter Quelle aufrufen – das öffnet Tür und Tor für Angriffe. Immer kontrollieren, woher die Daten stammen.
9.4. PHP-Versionsunterschiede
- Ab PHP 5.1: __set_state() für Objekte
- Export von stdClass kann je nach Version als (object) array(...) oder als stdClass::__set_state() erfolgen.
- Namespaces: Volle Qualifizierung im Export-String.
Fazit: var_export() meistern
var_export() ist ein mächtiges Werkzeug für Entwickler, die Variablen als lauffähigen PHP-Code speichern wollen. Ob als Konfigurationsdatei, Testdaten oder zur Code-Generierung – der Nutzen liegt in der klaren, ausführbaren Repräsentation.
Allerdings musst du Einschränkungen kennen: Ressourcen werden nicht unterstützt, zirkuläre Referenzen führen zu Fehlern und eval birgt Risiken. Wer das beachtet, gewinnt ein vielseitiges Werkzeug für viele Entwicklungsaufgaben.
Probier die Funktion mit eigenen Daten aus – je komplexer, desto spannender wird der Export.