(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
var_export — Выводит или возвращает удобное для разбора строковое представление переменной
Функция var_export() возвращает структурированную информацию о переменной. Функция аналогична функции var_dump() за одним исключением: она возвращает представление переменной в виде допустимого PHP-кода.
value
Переменная, которую требуется экспортировать.
return
Со значением true
функция var_export() вернёт
представление переменной, а не выведет.
Функция возвращает представление переменной, если параметр return
установили и значение аргумента вычисляется как true
, иначе функция возвращает null
.
Версия | Описание |
---|---|
8.2.0 | Названия экспортируемых классов стали абсолютными; раньше ведущий обратный слеш опускался. |
7.3.0 |
Функция теперь вместо вызова несуществующего метода stdClass::__setState()
экспортирует объекты класса stdClass как массив,
который приводится к объекту: (object) array( ... ) .
Практический эффект заключается в том, что теперь объекты класса stdClass
доступны для экспорта, а полученный код сработает даже в более ранних версиях PHP.
|
Пример #1 Примеры экспорта переменной функцией var_export()
<?php
$a = array (1, 2, array ("a", "b", "c"));
var_export($a);
?>
Результат выполнения приведённого примера:
array ( 0 => 1, 1 => 2, 2 => array ( 0 => 'a', 1 => 'b', 2 => 'c', ), )
<?php
$b = 3.1;
$v = var_export($b, true);
echo $v;
?>
Результат выполнения приведённого примера:
3.1
Пример #2 Экспорт объекта класса stdClass с PHP 7.3.0
<?php
$person = new stdClass();
$person->name = 'ElePHPant ElePHPantsdotter';
$person->website = 'https://php.net/elephpant.php';
var_export($person);
?>
Результат выполнения приведённого примера:
(object) array( 'name' => 'ElePHPant ElePHPantsdotter', 'website' => 'https://php.net/elephpant.php', )
Пример #3 Экспорт классов
<?php
class A
{
public $var;
}
$a = new A();
$a->var = 5;
var_export($a);
?>
Результат выполнения приведённого примера:
\A::__set_state(array( 'var' => 5, ))
Пример #4 Пример экспорта переменной с обработкой магическим методом __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);
?>
Результат выполнения приведённого примера:
object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" }
Замечание:
Функцией невозможно экспортировать переменные с типом resource.
Замечание:
Функция var_export() не обрабатывает циклические ссылки, поскольку было бы почти невозможно сгенерировать интерпретируемый PHP-код для такого случая. Для операций с полным представлением массива или объекта вызывают функцию serialize().
До PHP 8.2.0 функция var_export() экспортировала объекты без ведущего обратного слеша перед названием класса, который определили в пространстве имён, для наилучшей обратной совместимости.
Замечание:
Функция var_export() сгенерирует исполняемый PHP-код, только если в каждом объекте, который обрабатывает функция, реализовали магический метод __set_state. Единственное исключение — объекты класса stdClass, которые экспортируются как массив с приведением к объекту.