AccessorCollection   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 50
wmc 11
lcom 1
cbo 2
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getArrayAccessor() 0 8 2
A getStdObjectAccessor() 0 8 2
A getObjectAccessor() 0 9 3
A setAccessor() 0 4 1
A getAccessorFor() 0 10 3
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