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用作数据映射,其中键是对象,值是可变数组?做这种工作还有其他可行的选择吗?
间接修改(即offsetGet返回引用)是最近的一种能力.请参阅说明ArrayAccess::offsetGet.SplObjectStorage似乎没有使用它(但是?).
我建议你改用直接修改:
$a = $storage[$fooB];
$a[] = 'test';
$storage[$fooB] = $a;
Run Code Online (Sandbox Code Playgroud)