Better way (imho) is to call:
$storage->removeAll($storage);
Especially, that sometimes (had no time to investigate) removeAllExcept(new SplObjectStorage()) leaves some elements.
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
SplObjectStorage::attach — Добавляет объект в контейнер
Добавляет объект object в контейнер и дополнительно может ассоциировать этот объект с какими-то данными.
Функция не возвращает значения после выполнения.
Пример #1 Пример использования SplObjectStorage::attach()
<?php
$o1 = new stdClass;
$o2 = new stdClass;
$s = new SplObjectStorage();
$s->attach($o1); // то же, что и $s[$o1] = NULL;
$s->attach($o2, "hello"); // то же, что и $s[$o2] = "hello";
var_dump($s[$o1]);
var_dump($s[$o2]);
?>
Вывод приведённого примера будет похож на:
NULL string(5) "hello"
Better way (imho) is to call:
$storage->removeAll($storage);
Especially, that sometimes (had no time to investigate) removeAllExcept(new SplObjectStorage()) leaves some elements.