Как получить объект, связанный с текущим ключом, при итерации через SplObjectStorage в PHP 5.4

в 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());
}

все, что мне действительно нужно, это какой-то способ получить фактический объект, который связано с ключом. Насколько я могу судить, невозможно даже вручную создать отдельный индексированный массив с числовым индексом и объектом SplObjectStorage.

1 ответов


сделать это:

$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);
}

Посмотреть подробнее SplObjectStorage:: current и SplObjectStorage::getInfo.