ayeo / pinkman
简单的序列化/反序列化实用工具
0.1.1
2021-11-18 15:43 UTC
Requires
- php: >=8.0
Requires (Dev)
- phpunit/phpunit: 9.3.0
This package is auto-updated.
Last update: 2024-09-19 18:51:27 UTC
README
注意:Pinkman 目前尚未达到稳定阶段。请谨慎使用。
Pinkman 非常高兴能帮您将任何对象转换为数组。它还可以从纯数组数据中重新构造对象。在我的公司,我们很高兴地使用 Pinkman 来帮助我们存储我们的聚合到数据库中。如果您在您的 CQRS 方法中遇到困难,您可能会发现它很有用。将 Pinkman 视为您的个人实验室助理。他迫不及待地想帮助您统治世界。
动机
内置的 php serialize/unserialize 函数在您不打算更改对象时表现良好。然后,就无法反序列化先前序列化的对象。我在 GitHub 上找到了一些类似工具,但并不满意,主要是因为配置太复杂。
安装
composer require ayeo/pinkman:0.1.0
核心功能
- 处理私有/受保护的属性
- 处理嵌套对象
- 处理重复嵌套
- 处理嵌套数组/集合
最简单的场景示例
序列化
考虑简单的平面对象来理解这一点
class Address { private $street; private $buildingNumber; private $apartamentNumber; private $postalCode; private $town; public function __construct( string $street, string $buildingNumber, string $apartamentNumver, string $postalCode, string $town, string $countryCode ) { //... } }
转换为数组是直接的
use Ayeo/Pinkman/Pinkaman; $address = new Address('Thomas Edisson Av', '34a', '11', 'NG10-32Q', 'Nottingham', 'UK'); $pinkman = new Pinkman() $pureData = $pinkman->distill($address);
数据数组看起来像这样
$pureData = [ 'street' => 'Thomas Edisson Av', 'buildingNumber' => '34a', 'apartamentNumber' => '11', 'postalCode' => 'NG10-34Q', 'town' => 'Nottingham', 'countryCode' => 'UK' ];
这不过是将对象结构映射到数组。但是对于更复杂的结构,它开始发光。
反序列化
正如您可能已经注意到的,输出数据是一个包含原始数据的数组。为了重新构造活着的对象,您需要提供足够的配置。在我们的简单场景中看起来像这样
$config = [ 'class' => Address::class ]; $object = $pinkman->hydrate($pureData, $config);
更详细和复杂的示例即将到来