Php 使用SplObjectStorage作为数据映射,可以使用可变数组作为数据映射吗?

Php 使用SplObjectStorage作为数据映射,可以使用可变数组作为数据映射吗?,php,spl,arrayaccess,splobjectstorage,Php,Spl,Arrayaccess,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('

在以下代码中:

$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的重载元素对…没有影响。”

我认为这是因为
SplObjectStorage
中的
ArrayAccess
的实现没有通过引用返回值

有没有办法将
SplObjectStorage
用作数据映射,其中键是对象,值是可变数组?有没有其他可行的方法来完成这类工作?

间接修改(即
offsetGet
返回引用)是最近的一种能力。看见SplObjectStorage似乎还没有利用它(现在?)

我建议您改用直接修改:

$a = $storage[$fooB];
$a[] = 'test';
$storage[$fooB] = $a;