Die VarExporter-Komponente stellt verschiedene Tools zum Umgang mit dem internen Zustand von Objekten bereit:
VarExporter::export()
ermöglicht den Export jeder serialisierbaren PHP-Datenstruktur in einfachen PHP-Code. Dabei bleibt die gesamte Semantik erhalten, die mit dem Serialisierungsmechanismus von PHP verbunden ist ( __wakeup
, __sleep
, Serializable
, __serialize
, __unserialize
);Instantiator::instantiate()
erstellt ein Objekt und legt seine Eigenschaften fest, ohne seinen Konstruktor oder andere Methoden aufzurufen;Hydrator::hydrate()
kann die Eigenschaften eines vorhandenen Objekts festlegen;Lazy*Trait
kann dafür sorgen, dass sich eine Klasse wie ein Lazy-Loading-Ghost oder ein virtueller Proxy verhält. Der Grund für die Verwendung VarExporter::export()
gegenüber serialize()
oder igbinary ist die Leistung: Dank OPcache ist der resultierende Code deutlich schneller und speichereffizienter als die Verwendung von unserialize()
oder igbinary_unserialize()
.
Im Gegensatz zu var_export()
funktioniert dies mit jedem serialisierbaren PHP-Wert.
Es bietet auch einige Verbesserungen gegenüber var_export()
/ serialize()
:
r
oder n
in den Daten durcheinander gebracht wird.ClassNotFoundException
aus, anstatt in PHP_Incomplete_Class
-Objekte unserialisiert zu werden;SplObjectStorage
, ArrayObject
oder ArrayIterator
Instanzen betreffen, bleiben erhalten;Reflection*
, IteratorIterator
und RecursiveIteratorIterator
lösen eine Ausnahme aus, wenn sie serialisiert werden (ihre nicht-erialisierte Version ist ohnehin fehlerhaft, siehe https://bugs.php.net/76737). Instantiator::instantiate($class)
erstellt ein Objekt der angegebenen Klasse, ohne seinen Konstruktor oder andere Methoden aufzurufen.
Hydrator::hydrate()
legt die Eigenschaften eines vorhandenen Objekts fest, einschließlich privater und geschützter Objekte. Zum Beispiel: