Var export: примеры (PHP)
var_export(mixed value [, bool return]): mixedФункция var_export() в PHP выводит или возвращает строковое представление переменной в виде валидного PHP-кода. Эта возможность полезна для сохранения данных или их отладки.
Используется для:
- Сериализации данных в читаемый PHP-код.
- Отладки сложных структур данных.
- Генерации PHP-кода для конфигурационных файлов или кеширования.
Функция имеет два параметра:
- value (обязательный) - переменная для экспорта.
- return (опциональный) - логический флаг. Если установлен в
true, функция возвращает строку. По умолчаниюfalse, вывод происходит напрямую.
<?php
$array = [1, 2, ['a', 'b']];
var_export($array);
?>array (
0 => 1,
1 => 2,
2 =>
array (
0 => 'a',
1 => 'b',
),
)<?php
$data = true;
$result = var_export($data, true);
echo $result;
?>true
<?php
class Sample {}
$obj = new Sample();
$obj->prop = 'value';
echo var_export($obj, true);
?>Sample::__set_state(array( 'prop' => 'value', ))
- print_r() - выводит информацию о переменной в удобочитаемом виде. Результат не всегда является валидным PHP-кодом. Подходит для отладки.
- var_dump() - отображает структуру и типы данных. Полезна для глубокой отладки, но вывод не является кодом для повторного использования.
- serialize() - создает хранимое представление переменной. Результат компактный, но нечитаемый для человека. Используется для постоянного хранения данных.
var_export() предпочтительнее, когда требуется получить валидный PHP-код для последующего включения или сохранения.
<?php
$file = fopen('test.txt', 'r');
echo var_export($file, true);
?>NULL
Ресурсы не могут быть экспортированы, функция возвращает NULL.
<?php
$a = [];
$a[] = &$a;
var_export($a);
?>
Warning: var_export does not handle circular references in ...
array (
0 =>
array (
0 =>
array (
0 =>
array (
0 => ...
),
),
),
)При циклических ссылках возникает предупреждение и некорректный вывод.
- PHP 8.2.0: Изменен формат вывода для свойств типов
nullиfalse. Теперь они всегда выводятся в нижнем регистре (ранееNULLиFALSE). - PHP 7.3.0: Добавлена поддержка экспорта объектов stdClass. Теперь
var_export((object) array())выводит(object) array(...)вместо вызоваstdClass::__set_state().
<?php
$config = [
'db' => ['host' => 'localhost', 'user' => 'root'],
'debug' => true
];
$code = '<?php
return ' . var_export($config, true) . ';
';
file_put_contents('config.php', $code);
?><?php
class Config {
public $settings = [];
public static function __set_state($state) {
$obj = new self();
$obj->settings = $state['settings'];
return $obj;
}
}
$obj = new Config();
$obj->settings = ['mode' => 'production'];
eval('$new = ' . var_export($obj, true) . ';');
print_r($new);
?>Config Object
(
[settings] => Array
(
[mode] => production
)
)<?php
$func = function($x) { return $x * 2; };
echo var_export($func, true);
?>NULL
Анонимные функции (замыкания) не могут быть экспортированы.
data = {'key': [1, 2]}
print(repr(data)){'key': [1, 2]}Возвращает строку, часто являющуюся валидным кодом Python. В отличие от PHP, не всегда генерирует исполняемый код для сложных объектов.
let obj = {x: 1, y: [2, 3]};
console.log(JSON.stringify(obj, null, 2));{
"x": 1,
"y": [
2,
3
]
}Создает строку JSON. Форматирует вывод, но работает только с JSON-совместимыми типами данных (нет функций, undefined).
Экспорт результатов запроса в файл. Кардинально отличается по назначению, служит для выгрузки данных из таблиц, а не сериализации переменных.