DependencyResolver::resolveDependencies()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 13
ccs 7
cts 7
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 8
nc 2
nop 1
crap 2
1
<?php
2
3
namespace Hgraca\MicroDI\DependencyResolver;
4
5
use Hgraca\Cache\CacheInterface;
6
use Hgraca\Cache\Exception\CacheItemNotFoundException;
7
use Hgraca\Cache\Null\NullCache;
8
use Hgraca\Helper\InstanceHelper;
9
10
final class DependencyResolver implements DependencyResolverInterface
11
{
12
    /** @var CacheInterface */
13
    private $cache;
14
15 28
    public function __construct(CacheInterface $cache = null)
16
    {
17 28
        $this->cache = $cache ?? new NullCache();
18 28
    }
19
20 7
    public function resolveDependencies($callable): array
21
    {
22 7
        $dependenciesKey = $this->getDependenciesKey($callable);
23
24
        try {
25 7
            $dependencies = $this->cache->fetch($dependenciesKey);
26 6
        } catch (CacheItemNotFoundException $e) {
27 6
            $dependencies = InstanceHelper::getParameters($callable);
28 6
            $this->cache->save($dependenciesKey, $dependencies);
29
        }
30
31 7
        return $dependencies;
32
    }
33
34 7
    private function getDependenciesKey($callable): string
35
    {
36 7
        return is_object($callable) ? spl_object_hash($callable) : md5(serialize($callable));
37
    }
38
}
39