データマップとしてsplobjectStorageを使用して、可変配列をデータとして使用できますか?

StackOverflow https://stackoverflow.com/questions/9380430

質問

次のコードで:

$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の過負荷の要素の間接的な変更は効果がない...」と書かれた通知を引き起こします。

これは、の実装のために起こると思います ArrayAccessSplObjectStorage 参照によって値を返しません。

使用する方法はありますか SplObjectStorage キーがオブジェクトであり、値が可変配列であるデータマップとして?この種の作業を行うための他の実行可能なオプションはありますか?

役に立ちましたか?

解決

間接的な変更(すなわち offsetGet 参照を返す)は最近の能力です。見る のメモ ArrayAccess::offsetGet. 。 splobjectStorageがそれを利用しているとは思われません(まだ?)。

代わりに直接修正を使用することをお勧めします。

$a = $storage[$fooB];
$a[] = 'test';
$storage[$fooB] = $a;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top