В следующем коде:
$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
в качестве карты данных, где ключи являются объектами, а значения - изменяемыми массивами? Есть ли другие жизнеспособные варианты для выполнения такой работы?