对象构造¶
在映射过程中,对象的实例被递归地创建并使用来自输入的值进行填充。
对象的值可以使用构造函数(这是推荐的方式)或使用类属性来填充。如果存在构造函数,则将使用该构造函数来创建对象,否则将直接填充属性。
默认情况下,如果类的原生构造函数是公开的,该库就会使用它。对于高级用例,该库也允许使用自定义构造函数。
具有单个值的类¶
当一个对象只需要一个值(一个构造函数参数或一个属性)时,提供给映射器的源可以匹配该值的类型 - 它不需要是一个具有一个值且其键与参数/属性名称匹配的数组。
当应用程序可以控制提供给映射器的源的格式时,这可能很有用,以减少输入的结构。
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…',
]);