Php 使用ArrayObject存储阵列

Php 使用ArrayObject存储阵列,php,arrays,arrayobject,Php,Arrays,Arrayobject,我试图存储一个数组,并使用扩展ArrayObject的自定义类操作该数组 class MyArrayObject extends ArrayObject { protected $data = array(); public function offsetGet($name) { return $this->data[$name]; } public function offsetSet($name, $value) {

我试图存储一个数组,并使用扩展ArrayObject的自定义类操作该数组

class MyArrayObject extends ArrayObject {
    protected $data = array();

    public function offsetGet($name) {
        return $this->data[$name];
    }

    public function offsetSet($name, $value) {
        $this->data[$name] = $value;
    }

    public function offsetExists($name) {
        return isset($this->data[$name]);
    }

    public function offsetUnset($name) {
        unset($this->data[$name]);
    }
}
问题是如果我这样做:

$foo = new MyArrayObject();
$foo['blah'] = array('name' => 'bob');
$foo['blah']['name'] = 'fred';
echo $foo['blah']['name'];

输出是bob而不是fred。有没有什么方法可以在不更改上述4行的情况下使其正常工作?

这是ArrayAccess的已知行为(“PHP注意:间接修改MyArrayObject的重载元素没有效果”…)

在MyArrayObject中实现这一点:

public function offsetSet($offset, $data) {
    if (is_array($data)) $data = new self($data);
    if ($offset === null) {
        $this->data[] = $data;
    } else {
        $this->data[$offset] = $data;
    }
} 

问题是数组是作为对象存储的,所以如果我设置了一个值数组,那么在循环遍历它们之前,我必须调用
toArray()
。@fire实现迭代器和Countable?