Completed
Push — master ( c8e320...41a25f )
by Mike
03:33
created

AbstractDependencyContainer::offsetGet()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 7
c 0
b 0
f 0
ccs 0
cts 4
cp 0
rs 10
cc 2
nc 2
nop 1
crap 6
1
<?php
2
declare(strict_types=1);
3
4
namespace Xervice\Core\Business\Model\Dependency;
5
6
7
use Xervice\Core\Business\Model\Config\ConfigInterface;
8
use Xervice\Core\Business\Model\Dependency\Provider\DependencyProviderInterface;
9
10
class AbstractDependencyContainer implements DependencyContainerInterface
11
{
12
    /**
13
     * @var array
14
     */
15
    private $dependencies;
16
17
    /**
18
     * @var array
19
     */
20
    private $values;
21
22
    /**
23
     * @var \Xervice\Core\Business\Model\Config\ConfigInterface
24
     */
25
    private $config;
26
27
    /**
28
     * AbstractDependencyContainer constructor.
29
     *
30
     * @param \Xervice\Core\Business\Model\Config\ConfigInterface $config
31
     */
32 3
    public function __construct(ConfigInterface $config)
33
    {
34 3
        $this->config = $config;
35 3
    }
36
37
    /**
38
     * @param string $name
39
     * @param callable $callable
40
     *
41
     * @return \Xervice\Core\Business\Model\Dependency\DependencyContainerInterface
42
     */
43
    public function set(string $name, callable $callable): DependencyContainerInterface
44
    {
45
        $this->offsetSet($name, $callable);
46
47
        return $this;
48
    }
49
50
    /**
51
     * @param string $name
52
     *
53
     * @return mixed
54
     */
55
    public function get(string $name)
56
    {
57
        return $this->offsetGet($name);
58
    }
59
60
    /**
61
     * @param mixed $offset
62
     *
63
     * @return bool
64
     */
65
    public function offsetExists($offset): bool
66
    {
67
        return isset($this->dependencies[$offset]);
68
    }
69
70
    /**
71
     * @param mixed $offset
72
     *
73
     * @return mixed
74
     */
75
    public function offsetGet($offset)
76
    {
77
        if (!isset($this->values[$offset])) {
78
            $this->values[$offset] = $this->dependencies[$offset]($this);
79
        }
80
81
        return $this->values[$offset];
82
    }
83
84
    /**
85
     * @param mixed $offset
86
     * @param mixed $value
87
     */
88
    public function offsetSet($offset, $value)
89
    {
90
        $this->dependencies[$offset] = $value;
91
    }
92
93
    /**
94
     * @param mixed $offset
95
     */
96
    public function offsetUnset($offset)
97
    {
98
        unset($this->dependencies[$offset], $this->values[$offset]);
99
    }
100
101
    /**
102
     * @param \Xervice\Core\Business\Model\Dependency\Provider\DependencyProviderInterface $dependencyProvider
103
     */
104 2
    public function register(DependencyProviderInterface $dependencyProvider): void
105
    {
106 2
        $dependencyProvider->handleDependencies($this);
107 2
    }
108
109
    /**
110
     * @param string $name
111
     * @param callable $callable
112
     */
113
    public function extend(string $name, callable $callable): void
114
    {
115
        $value = $this->offsetGet($name);
116
        $this->offsetUnset($name);
117
        $this->offsetSet($name, $callable($value));
118
    }
119
120
    /**
121
     * @return \Xervice\Core\Business\Model\Config\ConfigInterface
122
     */
123
    protected function getConfig(): ConfigInterface
124
    {
125
        return $this->config;
126
    }
127
}