Test Failed
Pull Request — master (#391)
by Kiran
15:55
created

Recursive_ArrayAccess::toArray()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 6
nc 3
nop 0
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
1
<?php
2
/**
3
 * Multidimensional ArrayAccess
4
 *
5
 * Allows ArrayAccess-like functionality with multidimensional arrays.  Fully supports
6
 * both sets and unsets.
7
 *
8
 * @package WordPress
9
 * @subpackage Session
10
 * @since 3.7.0
11
 */
12
13
/**
14
 * Recursive array class to allow multidimensional array access.
15
 *
16
 * @package WordPress
17
 * @since 3.7.0
18
 */
19
class Recursive_ArrayAccess implements ArrayAccess, Iterator, Countable {
20
	/**
21
	 * Internal data collection.
22
	 *
23
	 * @var array
24
	 */
25
	protected $container = array();
26
27
	/**
28
	 * Flag whether or not the internal collection has been changed.
29
	 *
30
	 * @var bool
31
	 */
32
	protected $dirty = false;
33
34
	/**
35
	 * Default object constructor.
36
	 *
37
	 * @param array $data
38
	 */
39
	protected function __construct( $data = array() ) {
40
		foreach ( $data as $key => $value ) {
41
			$this[ $key ] = $value;
42
		}
43
	}
44
45
	/**
46
	 * Allow deep copies of objects
47
	 */
48
	public function __clone() {
49
		foreach ( $this->container as $key => $value ) {
50
			if ( $value instanceof self ) {
51
				$this[ $key ] = clone $value;
52
			}
53
		}
54
	}
55
56
	/**
57
	 * Output the data container as a multidimensional array.
58
	 *
59
	 * @return array
60
	 */
61
	public function toArray() {
62
		$data = $this->container;
63
		foreach ( $data as $key => $value ) {
64
			if ( $value instanceof self ) {
65
				$data[ $key ] = $value->toArray();
66
			}
67
		}
68
		return $data;
69
	}
70
71
	/*****************************************************************/
72
	/*                   ArrayAccess Implementation                  */
73
	/*****************************************************************/
74
75
	/**
76
	 * Whether a offset exists
77
	 *
78
	 * @link http://php.net/manual/en/arrayaccess.offsetexists.php
79
	 *
80
	 * @param mixed $offset An offset to check for.
81
	 *
82
	 * @return boolean true on success or false on failure.
83
	 */
84
	public function offsetExists( $offset ) {
85
		return isset( $this->container[ $offset ]) ;
86
	}
87
88
	/**
89
	 * Offset to retrieve
90
	 *
91
	 * @link http://php.net/manual/en/arrayaccess.offsetget.php
92
	 *
93
	 * @param mixed $offset The offset to retrieve.
94
	 *
95
	 * @return mixed Can return all value types.
96
	 */
97
	public function offsetGet( $offset ) {
98
		return isset( $this->container[ $offset ] ) ? $this->container[ $offset ] : null;
99
	}
100
101
	/**
102
	 * Offset to set
103
	 *
104
	 * @link http://php.net/manual/en/arrayaccess.offsetset.php
105
	 *
106
	 * @param mixed $offset The offset to assign the value to.
107
	 * @param mixed $value  The value to set.
0 ignored issues
show
Bug introduced by
There is no parameter named $value. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
108
	 *
109
	 * @return void
110
	 */
111
	public function offsetSet( $offset, $data ) {
112
		if ( is_array( $data ) ) {
113
			$data = new self( $data );
114
		}
115
		if ( $offset === null ) { // don't forget this!
116
			$this->container[] = $data;
117
		} else {
118
			$this->container[ $offset ] = $data;
119
		}
120
121
		$this->dirty = true;
122
	}
123
124
	/**
125
	 * Offset to unset
126
	 *
127
	 * @link http://php.net/manual/en/arrayaccess.offsetunset.php
128
	 *
129
	 * @param mixed $offset The offset to unset.
130
	 *
131
	 * @return void
132
	 */
133
	public function offsetUnset( $offset ) {
134
		unset( $this->container[ $offset ] );
135
136
		$this->dirty = true;
137
	}
138
	
139
	
140
	/*****************************************************************/
141
	/*                     Iterator Implementation                   */
142
	/*****************************************************************/
143
144
	/**
145
	 * Current position of the array.
146
	 *
147
	 * @link http://php.net/manual/en/iterator.current.php
148
	 *
149
	 * @return mixed
150
	 */
151
	public function current() {
152
		return current( $this->container );
153
	}
154
155
	/**
156
	 * Key of the current element.
157
	 *
158
	 * @link http://php.net/manual/en/iterator.key.php
159
	 *
160
	 * @return mixed
161
	 */
162
	public function key() {
163
		return key( $this->container );
164
	}
165
166
	/**
167
	 * Move the internal point of the container array to the next item
168
	 *
169
	 * @link http://php.net/manual/en/iterator.next.php
170
	 *
171
	 * @return void
172
	 */
173
	public function next() {
174
		next( $this->container );
175
	}
176
177
	/**
178
	 * Rewind the internal point of the container array.
179
	 *
180
	 * @link http://php.net/manual/en/iterator.rewind.php
181
	 *
182
	 * @return void
183
	 */
184
	public function rewind() {
185
		reset( $this->container );
186
	}
187
188
	/**
189
	 * Is the current key valid?
190
	 *
191
	 * @link http://php.net/manual/en/iterator.rewind.php
192
	 *
193
	 * @return bool
194
	 */
195
	public function valid() {
196
		return $this->offsetExists( $this->key() );
197
	}
198
199
	/*****************************************************************/
200
	/*                    Countable Implementation                   */
201
	/*****************************************************************/
202
203
	/**
204
	 * Get the count of elements in the container array.
205
	 *
206
	 * @link http://php.net/manual/en/countable.count.php
207
	 *
208
	 * @return int
209
	 */
210
	public function count() {
211
		return count( $this->container );
212
	}
213
}
214