ClassDefinition::getConstructorParameters()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace Habemus\Definition\Build;
5
6
use Habemus\Autowiring\ClassResolver;
7
use Habemus\Definition\Definition;
8
use Habemus\Definition\Identifiable\IdentifiableTrait;
9
use Habemus\Definition\MethodCall\CallableMethod;
10
use Habemus\Definition\MethodCall\CallableMethodTrait;
11
use Habemus\Definition\Sharing\Shareable;
12
use Habemus\Definition\Sharing\ShareableTrait;
13
use Habemus\Definition\Tag\Taggable;
14
use Habemus\Definition\Tag\TaggableTrait;
15
use Habemus\Exception\ContainerException;
16
use Psr\Container\ContainerInterface;
17
18
class ClassDefinition implements Definition, Shareable, CallableMethod, Taggable
19
{
20
    use IdentifiableTrait;
21
    use ShareableTrait;
22
    use CallableMethodTrait;
23
    use TaggableTrait;
24
25
    /**
26
     * @var string
27
     */
28
    protected $class;
29
30
    /**
31
     * @var array
32
     */
33
    protected $constructorParameters;
34
35
    /**
36
     * @var ClassResolver|null
37
     */
38
    protected $classResolver;
39
40
    public function __construct(string $class, array $constructor = [])
41
    {
42
        $this->class = $class;
43
        $this->constructorParameters = $constructor;
44
    }
45
46
    public function setClassResolver(ClassResolver $classResolver): self
47
    {
48
        $this->classResolver = $classResolver;
49
        return $this;
50
    }
51
52
    public function constructor(string $param, $value): self
53
    {
54
        $this->constructorParameters[$param] = $value;
55
        return $this;
56
    }
57
58
    public function getConstructorParameters(): array
59
    {
60
        return $this->constructorParameters;
61
    }
62
63
    public function class(): string
64
    {
65
        return $this->class;
66
    }
67
68
    public function getConcrete(ContainerInterface $container)
69
    {
70
        if (! $this->classResolver instanceof ClassResolver) {
71
            throw new ContainerException('No ClassResolver implementation has been set.');
72
        }
73
74
        $arguments = (new ArrayDefinition($this->constructorParameters))->getConcrete($container);
75
        return $this->classResolver->resolveClass($this->class, $arguments);
76
    }
77
}
78