2012-02-21 88 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; 
相关问题