lookyman/json-mapper

此包已被废弃,不再维护。未建议替代包。

基于 PHPStan 的严格 JSON 到对象的保湿器。

0.0.6 2022-01-03 10:13 UTC

This package is auto-updated.

Last update: 2024-05-04 16:00:58 UTC


README

基于 PHPStan 的严格 JSON 到对象的保湿器。

用法

use Lookyman\JsonMapper\MapperBuilder
use PHPUnit\Framework\Assert;

class Foo
{
    public function __construct(public string $foo)
    {
    }
}

class Bar
{
    public function __construct(public Foo $first)
    {
    }
}

$result = (new MapperBuilder())
    ->build()
    ->map(Bar::class, '{"first":{"foo":"wtf"}}');

Assert::assertEquals(
    new Bar(new Foo('wtf')),
    $result,
);

如果参数在源中不存在,但有标量默认值,则将其分配该值。如果参数在源中不存在,但可为空,则分配一个 NULL 值。如果源中包含参数名称中不存在的键,则忽略这些键。否则,我们不进行任何猜测或类型转换。

在出现任何错误的情况下,将抛出 Lookyman\JsonMapper\Exception\MapperException

支持类型

  • 标量(包括字面量和整数范围),
  • 数组(包括关联数组和形状),
  • 可迭代对象,
  • class-string(包括泛型),
  • 对象,
  • 普通类对象(包括泛型),
  • 联合(包括可为空的参数),
  • 受支持的枚举。

有关示例,请参阅 PHPStan 文档tests 目录。

注意事项

所有类都必须可以通过公共构造函数实例化。如果您的类型包含接口或抽象类,请使用 MapperBuilder::withClassMapping 提供到具体类的映射。

有问题吗?

这是我2021年底假期中玩的一个小项目,因为我看到 @Ocramius 几周前在寻找一个类似的库。目前,我对它没有野心,我只是想看看这种方法是否可行。

它可能包含很多错误。

如果您有任何问题,答案可能是“我不知道”。如果您有任何请求,我可能不会回应。

但我保留随时改变主意的权利。