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: