如何在PHP 5.4中迭代SplObjectStorage时获取与当前键关联的对象

Phi*_*lan 9 php spl

在PHP 5.4中,我有一个SplObjectStorage实例,我将对象与一些额外的元数据相关联.然后我需要遍历SplObjectStorage的实例并检索与当前键关联的对象.我试图使用SplObjectStorage :: key,但这不起作用(但可能在PHP 5.5中有效).

这是我试图做的简化版本:

$storage = new SplObjectStorage;
$foo = (object)['foo' => 'bar'];
$storage->attach($foo, ['room' => 'bar'];

foreach ($storage as $value) {
    print_r($value->key());
}
Run Code Online (Sandbox Code Playgroud)

我真正需要的只是某种方法来检索与密钥相关联的实际对象.据我所知,甚至不可能手动创建一个带有数字索引和SplObjectStorage指向的对象的单独索引数组.

voo*_*417 9

这样做:

$storage = new SplObjectStorage;
$foo = (object)['foo' => 'bar'];
$storage->attach($foo, ['room' => 'bar']);

foreach ($storage as $value) {
    $obj = $storage->current(); // current object
    $assoc_key  = $storage->getInfo(); // return, if exists, associated with cur. obj. data; else NULL

    var_dump($obj);
    var_dump($assoc_key);
}
Run Code Online (Sandbox Code Playgroud)

查看更多SplObjectStorage :: currentSplObjectStorage :: getInfo.

  • 显然$ storage-> current()返回用作键的对象,$ storage-> getInfo()返回与之关联的数据.这对我来说并不明显,因为Iterator :: current()通常返回与键相关的数据,反之亦然. (4认同)
  • 尝试添加另一个对象(`foo1`)withoud关联数据 - $ assoc_key将是'NULL` (2认同)