Var export: примеры (PHP)

Использование 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',
))
Похожие функции PHP
  • 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
  • PHP 8.2.0: Изменен формат вывода для свойств типов null и false. Теперь они всегда выводятся в нижнем регистре (ранее NULL и FALSE).
  • PHP 7.3.0: Добавлена поддержка экспорта объектов stdClass. Теперь var_export((object) array()) выводит (object) array(...) вместо вызова stdClass::__set_state().
Расширенные примеры
Создание файла конфигурации
Пример php
<?php
$config = [
    'db' => ['host' => 'localhost', 'user' => 'root'],
    'debug' => true
];
$code = '<?php
return ' . var_export($config, true) . ';
';
file_put_contents('config.php', $code);
?>
Метод __set_state в классах
Пример php
<?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
<?php
$func = function($x) { return $x * 2; };
echo var_export($func, true);
?>
NULL

Анонимные функции (замыкания) не могут быть экспортированы.

Аналоги в других языках
Python: repr()
data = {'key': [1, 2]}
print(repr(data))
{'key': [1, 2]}

Возвращает строку, часто являющуюся валидным кодом Python. В отличие от PHP, не всегда генерирует исполняемый код для сложных объектов.

JavaScript: JSON.stringify()
let obj = {x: 1, y: [2, 3]};
console.log(JSON.stringify(obj, null, 2));
{
  "x": 1,
  "y": [
    2,
    3
  ]
}

Создает строку JSON. Форматирует вывод, но работает только с JSON-совместимыми типами данных (нет функций, undefined).

MySQL: SELECT ... INTO OUTFILE

Экспорт результатов запроса в файл. Кардинально отличается по назначению, служит для выгрузки данных из таблиц, а не сериализации переменных.

PHP var_export function comments

En
Var export Outputs or returns a parsable string representation of a variable