在以下代码中:
$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')
为ArrayAccess
,而不是SplObjectStorage
。这也会触发一条通知,内容为“间接修改SplObjectStorage的重载元素对...没有影响”。
我认为这是因为SplObjectStorage
中{{1}}的实施不会通过引用返回值。
有没有办法使用{{1}}作为数据映射,其中键是对象,值是可变数组?做这种工作还有其他可行的选择吗?
答案 0 :(得分:6)
间接修改(即offsetGet
返回引用)是最近的一种能力。见the note for ArrayAccess::offsetGet
。 SplObjectStorage似乎没有使用它(但是?)。
我建议您改为使用直接修改:
$a = $storage[$fooB];
$a[] = 'test';
$storage[$fooB] = $a;