2012-02-21 82 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'),事實並非如此。這也觸發一個通知,上面寫着「SplObjectStorage重載元素的間接修改有沒有效果...」

我覺得出現這種情況是因爲ArrayAccessSplObjectStorage實現不通過引用返回值。

有什麼方法可以使用SplObjectStorage作爲數據映射,其中鍵是對象而數值是可變數組?做這種工作還有其他可行的選擇嗎?

回答

6

間接修改(即返回引用的offsetGet)是最近的能力。見the note for ArrayAccess::offsetGet。似乎SplObjectStorage沒有使用它(但?)。

我建議你使用,而不是直接修改:

$a = $storage[$fooB]; 
$a[] = 'test'; 
$storage[$fooB] = $a; 
相關問題