Компонент 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()
устанавливает свойства существующего объекта, включая частные и защищенные. Например: