Le composant VarExporter fournit divers outils pour gérer l'état interne des objets :
VarExporter::export() permet d'exporter n'importe quelle structure de données PHP sérialisable vers du code PHP brut. Ce faisant, il préserve toute la sémantique associée au mécanisme de sérialisation de PHP ( __wakeup , __sleep , Serializable , __serialize , __unserialize ) ;Instantiator::instantiate() crée un objet et définit ses propriétés sans appeler son constructeur ni aucune autre méthode ;Hydrator::hydrate() peut définir les propriétés d'un objet existant ;Lazy*Trait peut faire en sorte qu'une classe se comporte comme un fantôme à chargement paresseux ou un proxy virtuel. La raison d'utiliser VarExporter::export() vs serialize() ou igbinary est la performance : grâce à OPcache, le code résultant est nettement plus rapide et plus efficace en mémoire que l'utilisation unserialize() ou igbinary_unserialize() .
Contrairement à var_export() , cela fonctionne sur n'importe quelle valeur PHP sérialisable.
Il apporte également quelques améliorations par rapport à var_export() / serialize() :
r ou n dans les données ;ClassNotFoundException au lieu d'être désérialisées en objets PHP_Incomplete_Class ;SplObjectStorage , ArrayObject ou ArrayIterator sont conservées ;Reflection* , IteratorIterator et RecursiveIteratorIterator lèvent une exception lors de la sérialisation (leur version non sérialisée est de toute façon cassée, voir https://bugs.php.net/76737). Instantiator::instantiate($class) crée un objet de la classe donnée sans appeler son constructeur ni aucune autre méthode.
Hydrator::hydrate() définit les propriétés d'un objet existant, y compris les propriétés privées et protégées. Par exemple: