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