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