多维数组对象
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;一旦您访问它们,所有值将始终隐式创建,这可能会使该对象的行为有点奇怪。
有没有办法通过多维数组访问来实现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;一旦您访问它们,所有值将始终隐式创建,这可能会使该对象的行为有点奇怪。