mirror of
https://github.com/danog/Valinor.git
synced 2024-11-26 20:24:40 +01:00
1b0ff39af6
It is now mandatory to list all possible class-types that can be inferred by the mapper. This change is a step towards the library being able to deliver powerful new features such as compiling a mapper for better performance. BREAKING CHANGE: the existing calls to `MapperBuilder::infer` that could return several class-names must now add a signature to the callback. The callbacks that require no parameter and always return the same class-name can remain unchanged. For instance: ```php $builder = (new \CuyZ\Valinor\MapperBuilder()) // Can remain unchanged ->infer(SomeInterface::class, fn () => SomeImplementation::class); ``` ```php $builder = (new \CuyZ\Valinor\MapperBuilder()) ->infer( SomeInterface::class, fn (string $type) => match($type) { 'first' => ImplementationA::class, 'second' => ImplementationB::class, default => throw new DomainException("Unhandled `$type`.") } ) // …should be modified with: ->infer( SomeInterface::class, /** @return class-string<ImplementationA|ImplementationB> */ fn (string $type) => match($type) { 'first' => ImplementationA::class, 'second' => ImplementationB::class, default => throw new DomainException("Unhandled `$type`.") } ); ``` |
||
---|---|---|
.. | ||
Fake | ||
Fixture | ||
Functional | ||
Integration | ||
StaticAnalysis | ||
Traits | ||
Unit |