(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
var_export — Liefert den Inhalt einer Variablen als parsbaren PHP-Code
var_export() gibt strukturierte Informationen zum Inhalt der übergebenen Variable zurück. Das Verhalten ist ähnlich dem der Funktion var_dump(), allerdings ist hier das Ergebnis valider PHP-Code mit dem sich der Inhalt der Variable wiederherstellen lässt.
Gibt die Darstellung der Variablen als PHP-Code zurück, wenn der
return
-Parameter genutzt wird und als Wert true
ergibt. Andernfalls gibt die Funktion null
zurück.
Version | Beschreibung |
---|---|
8.2.0 | Exportierte Klassennamen sind nun vollständig qualifiziert; zuvor wurde der vorangestellte Backslash weggelassen. |
7.3.0 |
stdClass-Objekte werden nun als ein Array
exportiert, das in ein Objekt umgewandelt wird ((object) array(
... ) ), anstatt die nicht existente Methode
stdClass::__setState() zu verwenden. Der
praktische Effekt ist, dass stdClass nun
exportierbar ist, und der erzeugte Code sogar mit früheren Versionen
von PHP funktioniert.
|
Beispiel #1 var_export()-Beispiele
<?php
$a = array (1, 2, array ("a", "b", "c"));
var_export($a);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array ( 0 => 1, 1 => 2, 2 => array ( 0 => 'a', 1 => 'b', 2 => 'c', ), )
<?php
$b = 3.1;
$v = var_export($b, true);
echo $v;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
3.1
Beispiel #2 Export von stdClass (seit PHP 7.3.0)
<?php
$person = new stdClass;
$person->name = 'ElePHPant ElePHPantsdotter';
$person->website = 'https://php.net/elephpant.php';
var_export($person);
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
(object) array( 'name' => 'ElePHPant ElePHPantsdotter', 'website' => 'https://php.net/elephpant.php', )
Beispiel #3 Export von Klassen
<?php
class A { public $var; }
$a = new A;
$a->var = 5;
var_export($a);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
A::__set_state(array( 'var' => 5, ))
Beispiel #4 Nutzung von __set_state
<?php
class A
{
public $var1;
public $var2;
public static function __set_state($an_array)
{
$obj = new A;
$obj->var1 = $an_array['var1'];
$obj->var2 = $an_array['var2'];
return $obj;
}
}
$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';
eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array(
// 'var1' => 5,
// 'var2' => 'foo',
// ));
var_dump($b);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" }
Hinweis:
Variablen vom Typ resource können von dieser Funktion nicht exportiert werden.
Hinweis:
var_export() ist nicht in der Lage, zirkuläre Referenzen aufzulösen, da es annähernd unmöglich ist, hierfür gültigen PHP-Code zu erzeugen. In solchen Fällen empfiehlt sich stattdessen die Nutzung der serialize() für eine vollständige Darstellung von entsprechenden Arrays oder Objekten.
Vor PHP 8.2.0 war beim Export von Objekten mittels var_export() der führende Backslash zwecks größtmöglicher Kompatibilität nicht im Namen von Klassen in Namensräumen enthalten.
Hinweis:
Um das von var_export() erzeugte PHP ausführen zu können, müssen alle verarbeiteten Objekte die magische Methode __set_state implementieren. Die einzige Ausnahme ist stdClass, die unter Verwendung eines Arrays, das zu einem Objekt umgewandelt wird, exportiert wird.