Компонент VarExporter предоставляет различные инструменты для работы с внутренним состоянием объектов:
VarExporter::export() позволяет экспортировать любую сериализуемую структуру данных PHP в простой код PHP. При этом он сохраняет всю семантику, связанную с механизмом сериализации PHP ( __wakeup , __sleep , Serializable , __serialize , __unserialize );Instantiator::instantiate() создает объект и устанавливает его свойства без вызова его конструктора или каких-либо других методов;Hydrator::hydrate() может устанавливать свойства существующего объекта;Lazy*Trait может заставить класс вести себя как призрак с отложенной загрузкой или виртуальный прокси. Причиной использования VarExporter::export() вместо serialize() или igbinary является производительность: благодаря OPcache результирующий код работает значительно быстрее и эффективнее использует память, чем использование unserialize() или igbinary_unserialize() .
В отличие от var_export() , это работает с любым сериализуемым значением PHP.
Он также предоставляет несколько улучшений по сравнению с var_export() / serialize() :
r или n в данных;ClassNotFoundException вместо десериализации в объекты PHP_Incomplete_Class ;SplObjectStorage , ArrayObject или ArrayIterator , сохраняются;Reflection* , IteratorIterator и RecursiveIteratorIterator выдают исключение при сериализации (их несериализованная версия все равно не работает, см. https://bugs.php.net/76737). Instantiator::instantiate($class) создает объект данного класса без вызова его конструктора или каких-либо других методов.
Hydrator::hydrate() устанавливает свойства существующего объекта, включая частные и защищенные. Например: