Completed
Push — master ( e2a3b3...5d4b38 )
by wen
02:54
created

AliasBinder::__call()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
c 0
b 0
f 0
rs 9.4285
cc 2
eloc 4
nc 2
nop 2
1
<?php
2
3
4
namespace Sco\Admin\Traits;
5
6
7
use Sco\Admin\Exceptions\BadMethodCallException;
8
9
trait AliasBinder
10
{
11
    protected $aliases = [];
12
13
    public function registerAliases(array $aliases)
14
    {
15
        foreach ($aliases as $alias => $class) {
16
            $this->bind($alias, $class);
17
        }
18
19
        return $this;
20
    }
21
22
    public function bind($alias, $class)
23
    {
24
        $this->aliases[$alias] = $class;
25
        return $this;
26
    }
27
28
    public function getAlias($key)
29
    {
30
        return $this->aliases[$key];
31
    }
32
33
    /**
34
     * Check if alias is registered.
35
     *
36
     * @param string $alias
37
     *
38
     * @return bool
39
     */
40
    public function hasAlias($alias)
41
    {
42
        return array_key_exists($alias, $this->aliases);
43
    }
44
45
    /**
46
     * @param string $alias
47
     * @param array  $arguments
48
     *
49
     * @return object
50
     */
51
    public function makeClass($alias, array $arguments)
52
    {
53
        $reflection = new \ReflectionClass($this->getAlias($alias));
54
55
        return $reflection->newInstanceArgs($arguments);
56
    }
57
58
    public function __call($method, $parameters)
59
    {
60
        if (!$this->hasAlias($method)) {
61
            throw new BadMethodCallException("Not Found {$method}");
62
        }
63
64
        return $this->makeClass($method, $parameters);
65
    }
66
}
67