ArrayAccess 多维 (un)set?
我有一个类实现,我试图让它与多维数组一起工作。 和工作。 虽然给我带来了一个问题。ArrayAccess
exists
get
set
unset
class ArrayTest implements ArrayAccess {
private $_arr = array(
'test' => array(
'bar' => 1,
'baz' => 2
)
);
public function offsetExists($name) {
return isset($this->_arr[$name]);
}
public function offsetSet($name, $value) {
$this->_arr[$name] = $value;
}
public function offsetGet($name) {
return $this->_arr[$name];
}
public function offsetUnset($name) {
unset($this->_arr[$name]);
}
}
$arrTest = new ArrayTest();
isset($arrTest['test']['bar']); // Returns TRUE
echo $arrTest['test']['baz']; // Echo's 2
unset($arrTest['test']['bar']); // Error
$arrTest['test']['bar'] = 5; // Error
我知道_arr美元
可以公开,这样你就可以直接访问它,但对于我的实现来说,它不是必需的,并且是私有的。
最后 2 行抛出错误:。Notice: Indirect modification of overloaded element
我知道通常不适用于多维数组,但是是否有任何围绕这个或任何稍微干净的实现来允许所需的功能?ArrayAccess
我能想到的最好的主意是使用一个角色作为分隔符,并在其中进行测试并采取相应的行动。虽然如果你正在处理一个可变的深度,这变得非常丑陋。set
unset
有谁知道为什么和工作,以便可能复制功能?exists
get
感谢任何人都可以提供的任何帮助。