Используя SplObjectStorage в качестве карты данных, можете ли вы использовать изменяемый массив в качестве данных?

В следующем коде:

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

6
задан Charles 21 February 2012 в 21:29
поделиться