跳至正文

对象构造

在映射过程中,对象的实例被递归地创建并使用来自输入的值进行填充。

对象的值可以使用构造函数(这是推荐的方式)或使用类属性来填充。如果存在构造函数,则将使用该构造函数来创建对象,否则将直接填充属性。

默认情况下,如果类的原生构造函数是公开的,该库就会使用它。对于高级用例,该库也允许使用自定义构造函数。

具有单个值的类

当一个对象只需要一个值(一个构造函数参数或一个属性)时,提供给映射器的源可以匹配该值的类型 - 它不需要是一个具有一个值且其键与参数/属性名称匹配的数组。

当应用程序可以控制提供给映射器的源的格式时,这可能很有用,以减少输入的结构。

final readonly class Identifier
{
    public string $value;
}

final readonly class SomeClass
{
    public Identifier $identifier;

    public string $description;
}

$mapper = (new \CuyZ\Valinor\MapperBuilder())->mapper();

$mapper->map(SomeClass::class, [
    'identifier' => [
        // 👎 The `value` key feels a bit excessive
        'value' => 'some-identifier'
    ],
    'description' => 'Lorem ipsum…',
]); 

$mapper->map(SomeClass::class, [
    // 👍 The input has been flattened and is easier to read
    'identifier' => 'some-identifier',
    'description' => 'Lorem ipsum…',
]);