Completed
Push — master ( f172d4...76e139 )
by devosc
02:14
created

src/Config/Config.php (8 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 *
4
 */
5
6
namespace Mvc5\Config;
7
8
trait Config
9
{
10
    /**
11
     *
12
     */
13
    use ArrayAccess;
14
    use Iterator;
15
    use PropertyAccess;
16
17
    /**
18
     * @var array|Configuration
19
     */
20
    protected $config = [];
21
22
    /**
23
     * @param array $config
24
     */
25 444
    function __construct($config = [])
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
26
    {
27 444
        $this->config = $config;
28 444
    }
29
30
    /**
31
     * @param string $name
32
     * @return mixed
33
     */
34 322
    function get($name)
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
35
    {
36 322
        return is_array($this->config) ?
37 322
            (isset($this->config[$name]) ? $this->config[$name] : null) : $this->config[$name];
38
    }
39
40
    /**
41
     * @param string $name
42
     * @return bool
43
     */
44 39
    function has($name)
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
45
    {
46 39
        return isset($this->config[$name]);
47
    }
48
49
    /**
50
     * @param string $name
51
     * @return void
52
     */
53 7
    function remove($name)
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
54
    {
55 7
        unset($this->config[$name]);
56 7
    }
57
58
    /**
59
     * @param string $name
60
     * @param mixed $value
61
     * @return mixed
62
     */
63 117
    function set($name, $value)
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
64
    {
65 117
        return $this->config[$name] = $value;
66
    }
67
68
    /**
69
     * @param string $name
70
     * @param mixed $value
71
     * @return self|mixed
72
     */
73 24
    function with($name, $value)
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
74
    {
75 24
        $new = clone $this;
76
        
77 24
        $new->config instanceof Immutable 
78 1
                ? $new->config = $new->config->with($name, $value) 
79 24
                    : $new->set($name, $value);
80
        
81 24
        return $new;
82
    }
83
84
    /**
85
     * @param string $name
86
     * @return self|mixed
87
     */
88 3
    function without($name)
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
89
    {
90 3
        $new = clone $this;
91
        
92 3
        $new->config instanceof Immutable 
93 1
                ? $new->config = $new->config->without($name) 
94 3
                    : $new->remove($name);
95
        
96 3
        return $new;
97
    }
98
99
    /**
100
     *
101
     */
102 48
    function __clone()
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
103
    {
104 48
        if (!is_object($this->config)) {
105 45
            return null;
106
        }
107
108 21
        if (!$this->config instanceof Scope) {
109 18
            return $this->config = clone $this->config;
110
        }
111
112 3
        $scope = $this->config->scope();
113
114 3
        if (!$scope instanceof self) {
115 2
            return $this->config = clone $this->config;
116
        }
117
118 1
        $this->config->scope(false);
119
120 1
        $clone = clone $this->config;
121 1
        $clone->scope($this);
122
123 1
        $this->config->scope($scope);
124
125 1
        return $this->config = $clone;
126
    }
127
}
128