AccessorCollection::setAccessor()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
3
namespace gamringer\JSONPointer;
4
5
use gamringer\JSONPointer\Access\Accesses;
6
use gamringer\JSONPointer\Access\ArrayAccessor;
7
use gamringer\JSONPointer\Access\ObjectAccessor;
8
9
class AccessorCollection
10
{
11
    protected static $arrayAccessor;
12
    protected static $stdObjectAccessor;
13
    protected $objectAccessors = [];
14
15
    protected function getArrayAccessor()
16
    {
17
        if (!isset(static::$arrayAccessor)) {
18
            static::$arrayAccessor = new ArrayAccessor();
19
        }
20
21
        return static::$arrayAccessor;
22
    }
23
24
    protected function getStdObjectAccessor()
25
    {
26
        if (!isset(static::$stdObjectAccessor)) {
27
            static::$stdObjectAccessor = new ObjectAccessor();
28
        }
29
30
        return static::$stdObjectAccessor;
31
    }
32
33
    protected function getObjectAccessor($target)
34
    {
35
        foreach ($this->objectAccessors as $class => $objectAccessor) {
36
            if ($target instanceof $class) {
37
                return $objectAccessor;
38
            }
39
        }
40
        return $this->getStdObjectAccessor();
41
    }
42
43
    public function setAccessor($type, Accesses $accessor)
44
    {
45
        $this->objectAccessors[$type] = $accessor;
46
    }
47
48
    public function getAccessorFor(&$target)
49
    {
50
        switch (gettype($target)) {
51
            case 'array':
52
                return $this->getArrayAccessor();
53
54
            case 'object':
55
                return $this->getObjectAccessor($target);
56
        }
57
    }
58
}
59