Skip to content

Feature Export

github-actions[bot] edited this page Jul 16, 2026 · 1 revision

📤 Экспорт в PHP-код

← Возможности · Главная · Сравнение

Serializer::exporter() — экспорт значений в валидный исполняемый PHP-код: конфиги и кэш-файлы, которые opcache исполняет быстрее любого формата десериализации.

Принцип работы

Аналог var_export() с современным синтаксисом: короткие массивы [], list-массивы без ключей, enum как Class::CASE, даты как конструкторы new \DateTimeImmutable(...), stdClass как (object) [...]. Результат — строка кода (или готовый файл <?php return ...;), которую можно записать и подключить через require; после первого запуска opcache держит его в скомпилированном виде.

use CloudCastle\Serialize\Serializer;

$exporter = Serializer::exporter();

$exporter->export(['a' => 1, 'b' => [2, 3]]);      // "[\n    'a' => 1, ...]"
$exporter->export(Status::Paid);                    // "\App\Status::Paid"

// Готовый файл конфигурации для opcache
file_put_contents('config.php', $exporter->exportFile([
    'debug'  => false,
    'locale' => 'ru',
    'status' => Status::Draft,
]));
$config = require 'config.php';                      // исполняется opcache

Плюсы

  • Кэш-файлы под opcache — быстрее любой десериализации (нет разбора в рантайме).
  • Современный синтаксис: короткие массивы, enum, даты, stdClass.
  • В разы быстрее brick/varexporter (см. Сравнение).
  • Fail-safe: непредставимый тип (замыкание, ресурс) даёт исключение, а не мусорный код.

Минусы

  • Поддерживает скаляры, массивы, enum, даты и stdClass; произвольные объекты — через ObjectMapper в массив, затем экспорт.
  • Экспортируемый код исполняется — не применяйте к недоверенным данным как к коду.

✅ Рекомендуется

  • Компиляция конфигов и справочников в PHP-файлы для прогрева opcache.
  • Кэш редко меняющихся структур (маршруты, права, словари) на диск.

❌ Антипаттерны

  • Экспорт пользовательского ввода с последующим eval/require — исполнение чужого кода.
  • Экспорт больших часто меняющихся данных — теряется выигрыш opcache.

Clone this wiki locally