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: