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

Joe*_*oni 6 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';
Run Code Online (Sandbox Code Playgroud)

我希望$storage[$fooA]是1,它是.我也希望$storage[$fooB]如此array('test'),但事实并非如此.这也会触发一条通知,内容为"间接修改SplObjectStorage的重载元素对...没有影响"

我认为这是因为ArrayAccessin 的实现SplObjectStorage不通过引用返回值.

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

Fra*_*ila 6

间接修改(即offsetGet返回引用)是最近的一种能力.请参阅说明ArrayAccess::offsetGet.SplObjectStorage似乎没有使用它(但是?).

我建议你改用直接修改:

$a = $storage[$fooB];
$a[] = 'test';
$storage[$fooB] = $a;
Run Code Online (Sandbox Code Playgroud)