0

有没有办法实现具有多维数组访问的类?我想要类似的东西

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

1 回答 1

1

没有语法可以让一个类拦截多个级别的数组访问,但是您可以通过实现ArrayAccess接口一次完成一个级别:

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 ... */

}

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

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

于 2015-10-02T13:41:07.730 回答