Passed
Push — main ( 57e5ef...e75ff3 )
by Breno
02:48
created

ParameterResolverChain::resolve()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 4
nc 3
nop 3
dl 0
loc 9
rs 10
c 1
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace Habemus\Autowiring\Parameter;
5
6
use Habemus\Autowiring\Attributes\AttributesInjection;
7
use Habemus\Autowiring\Reflector;
8
use Habemus\Container;
9
use ReflectionParameter;
10
11
class ParameterResolverChain implements ParameterResolver
12
{
13
    /**
14
     * @var ParameterResolver[]
15
     */
16
    protected $chain;
17
18
    public function __construct(ParameterResolver ...$chain)
19
    {
20
        $this->chain = $chain;
21
    }
22
23
    /**
24
     * @inheritDoc
25
     */
26
    public function resolve(ReflectionParameter $parameter, array $arguments, array &$result): bool
27
    {
28
        foreach ($this->chain as $resolver) {
29
            if ($resolver->resolve($parameter, $arguments, $result)) {
30
                return true;
31
            }
32
        }
33
34
        return false;
35
    }
36
37
    public static function default(Container $container, AttributesInjection $injection, Reflector $reflector): self
38
    {
39
        return new self(
40
            new UserDefinedParameterResolver(),
41
            new InjectionParameterResolver($container, $injection),
42
            new DefaultValueParameterResolver(),
43
            new NullableParameterResolver(),
44
            new OptionalParameterResolver(),
45
            new TypeHintParameterResolver($container, $reflector)
46
        );
47
    }
48
}
49

 

OSZAR »