如何解決PHP對象序列化和反序列化的復雜性?使用eventsauce/object-hydrator可以!

可以通過以下地址學習 composer學習地址

在開發過程中,我需要將用戶提交的 json 數據轉換為嚴格的 php 對象,以便在后續的業務邏輯中使用。這些對象包括命令(Command)對象和查詢(Query)對象。最初,我嘗試手動編寫轉換代碼,但發現這不僅耗時,而且容易出錯。尤其是當數據結構復雜時,處理起來更加棘手。

這時,我發現了 eventsauce/Object-hydrator 這個庫。它可以將結構化數據(如 JSON)轉換為嚴格的 PHP 對象,并且支持反向操作——將對象序列化為結構化數據。它的安裝非常簡單,只需運行以下命令:

composer require eventsauce/object-hydrator

使用這個庫,我可以輕松地將 JSON 數據轉換為對象。例如:

use EventSauceObjectHydratorObjectMapperUsingReflection;  $mapper = new ObjectMapperUsingReflection();  class ExampleCommand {     public function __construct(         public readonly string $name,         public readonly int $birthYear,     ) {} }  $command = $mapper->hydrateObject(     ExampleCommand::class,     [         'name' => 'de Jonge',         'birth_year' => 1987     ], );  // 現在 $command 是一個 ExampleCommand 對象

不僅如此,這個庫還支持復雜的對象嵌套和數組轉換。例如:

立即學習PHP免費學習筆記(深入)”;

class ChildObject {     public function __construct(         public readonly string $value,     ) {} }  class ParentObject {     public function __construct(         public readonly string $value,         public readonly ChildObject $child,     ) {} }  $command = $mapper->hydrateObject(     ParentObject::class,     [         'value' => 'parent value',         'child' => [             'value' => 'child value',         ]     ], );

此外,eventsauce/object-hydrator 還提供了靈活的自定義映射和類型轉換功能。你可以使用屬性(attributes)來指定自定義的鍵映射和類型轉換。例如:

use EventSauceObjectHydratorMapFrom;  class ExampleCommand {     public function __construct(         public readonly string $name,         #[MapFrom('year')]         public readonly int $birthYear,     ) {} }

在性能方面,這個庫通過預編譯的方式生成優化后的映射代碼,可以實現比反射(reflection)快 3-10 倍的性能提升。

總的來說,eventsauce/object-hydrator 庫不僅簡化了 PHP 對象的序列化和反序列化過程,還提供了強大的自定義和性能優化功能。它讓我能夠專注于業務邏輯,而不必擔心數據轉換的細節,大大提高了開發效率。如果你也面臨類似的問題,不妨嘗試一下這個庫。

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享