ayeo/pinkman

简单的序列化/反序列化实用工具

0.1.1 2021-11-18 15:43 UTC

This package is auto-updated.

Last update: 2024-09-19 18:51:27 UTC


README

Build Status Coverage Software License

注意: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);

更详细和复杂的示例即将到来