在以下代码中:
$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
in的实现SplObjectStorage
不会通过引用返回值。
有什么方法可以SplObjectStorage
用作键是对象而值是可变数组的数据映射?做这种工作还有其他可行的选择吗?