Как получить объект, связанный с текущим ключом, при итерации через 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.

586   1  

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 .

Comments

    Ничего не найдено.