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

时间:2012-02-21 15:41:53

标签: 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('test')ArrayAccess,而不是SplObjectStorage。这也会触发一条通知,内容为“间接修改SplObjectStorage的重载元素对...没有影响”。

我认为这是因为SplObjectStorage中{{1}}的实施不会通过引用返回值。

有没有办法使用{{1}}作为数据映射,其中键是对象,值是可变数组?做这种工作还有其他可行的选择吗?

1 个答案:

答案 0 :(得分:6)

间接修改(即offsetGet返回引用)是最近的一种能力。见the note for ArrayAccess::offsetGet。 SplObjectStorage似乎没有使用它(但是?)。

我建议您改为使用直接修改:

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