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


Ответы (0 шт):