SplObjectStorage извлечь объект
Как извлечь первый объект из SplObjectStorage?
Ничего лучше не придумал, можно это сделать как то иначе?
$Obj = iterator_to_array($SPL)[0];
Пробовал так (возвращает null):
$SPL->rewind();
$Obj = $SPL->current(); // :null
Используется он для хранения подкатегорий в каталоге, и на сколько понял (код писал не я), для того что бы не было дубликатов.
Читал во вопрос про SplObjectStorage, и от части разделяю непонимание, чем он лучше массива или может чем то удобнее, объясните пожалуйста.
UPD:
$SPL->next() так же возвращает null,
var_dump($SPL); :
object(SplObjectStorage)#807 (1) {
["storage":"SplObjectStorage":private]=>
array(2) {
["0000000009d35fca00000000516ba508"]=>
array(2) {
["obj"]=>
...
["inf"]=>
int(6)
}
...
UPD_2:
class Category{
...
public function __construct(int $id = null)
{
$this->id = $id;
$this->subCategories = new \SplObjectStorage();
}
...
public function addSubCategory(Category &$category)
{
if ($this->subCategories->contains($category)) {
return;
}
$this->subCategories->attach($category, $category->id);
}
...
public function child(){
return $this->subCategories;
}
};
$Category = new Category();
...
$SPL = $Category->child();
$SPL->rewind();
$SPL->valid(); // :false