Многомерный ArrayObject

Есть ли способ реализовать класс с многомерным доступом к массиву? Я хочу что-то вроде

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

0

Решение

Нет синтаксиса, с которым класс может перехватывать множественный уровни доступа к массиву, но вы можете сделать это по одному реализация 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'], на котором вы можете установить данные.

Однако это не позволит вам различать сеттеры и геттеры; все значения всегда будут создаваться неявно, как только вы получите к ним доступ, что может сделать поведение этого объекта немного странным.

1

Другие решения

Других решений пока нет …