多维数组对象

Multidimensional ArrayObject

有没有办法通过多维数组访问来实现class?我想要类似

的东西
$obj = new MultiArrayObject();
$obj['key']['subkey'] = 'test';
echo $obj['key']['subkey']; //expect 'test' here

没有语法可以让 class 拦截 多个 级别的数组访问,但是您可以通过 [=14= 一次执行一个级别]:

class MultiArrayObject implements ArrayAccess {

    protected $data = [];

    public function offsetGet($offset) {
        if (!array_key_exists($offset, $this->data)) {
            $this->data[$offset] = new $this;
        }
        return $this->data[$offset];
    }

    /* the rest of the ArrayAccess methods ... */

}

一旦您访问 $obj['key'],这将创建并 return 一个新的嵌套 MultiArrayObject,您可以在其中设置数据。

但是,这不会让您区分 setter 和 getter;一旦您访问它们,所有值将始终隐式创建,这可能会使该对象的行为有点奇怪。