php - 使用 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('test'),但事实并非如此。这也会触发一条通知,内容为“间接修改 SplObjectStorage 的重载元素对...没有影响”

我认为发生这种情况是因为 SplObjectStorage 中的 ArrayAccess 的实现没有通过引用返回值。

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

最佳答案

间接修改(即 offsetGet 返回一个引用)是最近才出现的能力。参见 the note for ArrayAccess::offsetGet . SplObjectStorage 似乎没有使用它(还没有?)。

我建议你改用直接修改:

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

关于php - 使用 SplObjectStorage 作为数据映射,是否可以使用可变数组作为数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380430/

相关文章:

php - jQuery .live() 不工作

php - 根据最后插入的 id 生成唯一标识符

php - 如何使图像的背景透明度为0?

使用 CachingIterator 的 PHP 数组到字符串的转换通知

php - ArrayObject, getIterator();

php - 如果项不在数组中,则无法扩展 ArrayObject::offsetGet() 函数以返回 null

php - 无法使用 adodb 将字符串传递给 MySQL 存储过程

php - ArrayAccess 如何工作?

php - Arrayaccess 和 native php 数组函数