From 240fa3c5cc28905cfc48b66aac37f749b5c4a5b6 Mon Sep 17 00:00:00 2001 From: Sorin Sarca Date: Wed, 25 Dec 2024 05:46:17 +0200 Subject: [PATCH] Optimized deserialization --- src/ClassInfo.php | 12 ++++++------ src/DeserializationHandler.php | 4 ++-- src/GenericObjectSerialization.php | 4 +--- src/SerializationHandler.php | 2 +- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/ClassInfo.php b/src/ClassInfo.php index 5078c18..92efded 100644 --- a/src/ClassInfo.php +++ b/src/ClassInfo.php @@ -10,7 +10,7 @@ */ class ClassInfo { - public ReflectionClass $reflector; + public ReflectionClass $reflection; public bool $box; public bool $hasMagicSerialize; public bool $hasMagicUnserialize; @@ -27,14 +27,14 @@ class ClassInfo public function __construct(string $className) { - $reflector = $this->reflector = new ReflectionClass($className); - $this->box = empty($reflector->getAttributes(NoBox::class)); - $this->hasMagicSerialize = $reflector->hasMethod("__serialize"); - $this->hasMagicUnserialize = $reflector->hasMethod("__unserialize"); + $reflection = $this->reflection = new ReflectionClass($className); + $this->box = empty($reflection->getAttributes(NoBox::class)); + $this->hasMagicSerialize = $reflection->hasMethod("__serialize"); + $this->hasMagicUnserialize = $reflection->hasMethod("__unserialize"); } public function className(): string { - return $this->reflector->name; + return $this->reflection->name; } } \ No newline at end of file diff --git a/src/DeserializationHandler.php b/src/DeserializationHandler.php index 0192b25..41a25f0 100644 --- a/src/DeserializationHandler.php +++ b/src/DeserializationHandler.php @@ -179,11 +179,11 @@ private function unboxObject(Box $box): object // handle $this->handle($value); } - }, $info->className(), $this); + }, $info->reflection, $this); } // create a new object - $object = $info->reflector->newInstanceWithoutConstructor(); + $object = $info->reflection->newInstanceWithoutConstructor(); // we eagerly save cache $this->unboxed[$box] = $object; diff --git a/src/GenericObjectSerialization.php b/src/GenericObjectSerialization.php index 0b5a70f..caed726 100644 --- a/src/GenericObjectSerialization.php +++ b/src/GenericObjectSerialization.php @@ -43,10 +43,8 @@ public static function serialize(object $object): array return $data; } - public static function unserialize(array &$data, callable $solve, string $class): object + public static function unserialize(array &$data, callable $solve, ReflectionClass $reflection): object { - $reflection = new ReflectionClass($class); - $object = $reflection->newInstanceWithoutConstructor(); $solve($object, $data); diff --git a/src/SerializationHandler.php b/src/SerializationHandler.php index 6b29c29..9fb78ed 100644 --- a/src/SerializationHandler.php +++ b/src/SerializationHandler.php @@ -79,7 +79,7 @@ private function shouldBox(ClassInfo $info): bool return $this->shouldBox[$info] = true; } - if ($info->reflector->isInternal()) { + if ($info->reflection->isInternal()) { // internal classes are supported with custom serializers only return $this->shouldBox[$info] = false; }