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;