В следующем коде:
$storage = new \SplObjectStorage();
$fooA = new \StdClass();
$fooB = new \StdClass();
$storage[$fooA] = 1;
$storage[$fooB] = array();
$storage[$fooA] = 2;
$storage[$fooB][] = 'test';
Я бы ожидал, что $storage[$fooA]
будет 1
. Я также ожидал бы, что $storage[$fooB]
будет array('test')
, а это не так. Это также вызывает уведомление, которое гласит: «Косвенное изменение перегруженного элемента SplObjectStorage не действует в ...»
Я думаю, что это происходит потому, что реализация ArrayAccess
в SplObjectStorage
не возвращает значения по ссылке.
Есть ли способ использовать SplObjectStorage
в качестве карты данных, где ключи - это объекты, а значения - изменяемые массивы? Есть ли другие жизнеспособные варианты для выполнения этой работы?