有没有办法实现具有多维数组访问的类?我想要类似的东西
$obj = new MultiArrayObject();
$obj['key']['subkey'] = 'test';
echo $obj['key']['subkey']; //expect 'test' here
有没有办法实现具有多维数组访问的类?我想要类似的东西
$obj = new MultiArrayObject();
$obj['key']['subkey'] = 'test';
echo $obj['key']['subkey']; //expect 'test' here
没有语法可以让一个类拦截多个级别的数组访问,但是您可以通过实现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;一旦您访问它们,所有值将始终被隐式创建,这可能会使该对象的行为有点奇怪。