2012-02-21 5 views
6

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')であると期待しています。また、これは私がSplObjectStorageArrayAccessの実装は参照によって値を返さないので、これが起こると思います

「SplObjectStorageのオーバーロードされた要素の間接的な変更がで...何の効果もありません」、読み込み通知をトリガします。

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

答えて

6

間接改変(参考文献を返すoffsetGet)は最近の能力です。 the note for ArrayAccess::offsetGetを参照してください。 SplObjectStorageがそれを利用しているとは思われません(まだですか?)。

私はあなたの代わりに直接変更を使用することをお勧め:

$a = $storage[$fooB]; 
$a[] = 'test'; 
$storage[$fooB] = $a; 
関連する問題