Completed
Pull Request — master (#206)
by Kiran
05:47
created

Recursive_ArrayAccess   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 118
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0
Metric Value
wmc 15
lcom 1
cbo 0
dl 0
loc 118
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 2
A __clone() 0 7 3
A toArray() 0 9 3
A offsetExists() 0 3 1
A offsetGet() 0 3 2
A offsetSet() 0 12 3
A offsetUnset() 0 3 1
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.6.0
11
 */
12
13
// Exit if accessed directly
14
if ( ! defined( 'ABSPATH' ) ) exit;
15
16
/**
17
 * Recursive array class to allow multidimensional array access.
18
 *
19
 * @package WordPress
20
 * @since 3.6.0
21
 */
22
class Recursive_ArrayAccess implements ArrayAccess {
23
	/**
24
	 * Internal data collection.
25
	 *
26
	 * @var array
27
	 */
28
	protected $container = array();
29
30
	/**
31
	 * Flag whether or not the internal collection has been changed.
32
	 *
33
	 * @var bool
34
	 */
35
	protected $dirty = false;
36
37
	/**
38
	 * Default object constructor.
39
	 *
40
	 * @param array $data
41
	 */
42
	protected function __construct( $data = array() ) {
43
		foreach ( $data as $key => $value ) {
44
			$this[ $key ] = $value;
45
		}
46
	}
47
48
	/**
49
	 * Allow deep copies of objects
50
	 */
51
	public function __clone() {
52
		foreach ( $this->container as $key => $value ) {
53
			if ( $value instanceof self ) {
54
				$this[ $key ] = clone $value;
55
			}
56
		}
57
	}
58
59
	/**
60
	 * Output the data container as a multidimensional array.
61
	 *
62
	 * @return array
63
	 */
64
	public function toArray() {
65
		$data = $this->container;
66
		foreach ( $data as $key => $value ) {
67
			if ( $value instanceof self ) {
68
				$data[ $key ] = $value->toArray();
69
			}
70
		}
71
		return $data;
72
	}
73
74
	/**
75
	* ArrayAccess Implementation
76
	**/
77
78
	/**
79
	 * Whether a offset exists
80
	 *
81
	 * @link http://php.net/manual/en/arrayaccess.offsetexists.php
82
	 *
83
	 * @param mixed $offset An offset to check for.
84
	 *
85
	 * @return boolean true on success or false on failure.
86
	 */
87
	public function offsetExists( $offset ) {
88
		return isset( $this->container[ $offset ]) ;
89
	}
90
91
	/**
92
	 * Offset to retrieve
93
	 *
94
	 * @link http://php.net/manual/en/arrayaccess.offsetget.php
95
	 *
96
	 * @param mixed $offset The offset to retrieve.
97
	 *
98
	 * @return mixed Can return all value types.
99
	 */
100
	public function offsetGet( $offset ) {
101
		return isset( $this->container[ $offset ] ) ? $this->container[ $offset ] : null;
102
	}
103
104
	/**
105
	 * Offset to set
106
	 *
107
	 * @link http://php.net/manual/en/arrayaccess.offsetset.php
108
	 *
109
	 * @param mixed $offset The offset to assign the value to.
110
	 * @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...
111
	 *
112
	 * @return void
113
	 */
114
	public function offsetSet( $offset, $data ) {
115
		if ( is_array( $data ) ) {
116
			$data = new self( $data );
117
		}
118
		if ( $offset === null ) { // don't forget this!
119
			$this->container[] = $data;
120
		} else {
121
			$this->container[ $offset ] = $data;
122
		}
123
124
		$this->dirty = true;
125
	}
126
127
	/**
128
	 * Offset to unset
129
	 *
130
	 * @link http://php.net/manual/en/arrayaccess.offsetunset.php
131
	 *
132
	 * @param mixed $offset The offset to unset.
133
	 *
134
	 * @return void
135
	 */
136
	public function offsetUnset( $offset ) {
137
		unset( $this->container[ $offset ] );
138
	}
139
}
140