Почему в SplObjectStorage в массиве ключем является объект? Зачем это нужно?

Начал разбираться с SplObjectStorage. Можете, пожалуйста, "на пальцах" объяснить, почему в SplObjectStorage в качестве ключа массива хранятся объекты? А value элементов массива - это их значения. Какой смысл в том, чтобы ключами элементов массива были объекты? Или что это дает

$s = new SplObjectStorage();

$o1 = new StdClass;
$o2 = new StdClass;
$o3 = new StdClass;

$s[$o1] = "данные для объекта 1";
$s[$o2] = array(1,2,3);
$s->attach($o3);
echo '<pre>';
print_r($s);
echo '</pre>';

ниже: результат вызова echo print_r($s)

SplObjectStorage Object
(
    [storage:SplObjectStorage:private] => Array
        (
            [0000000001db526e00000000729ed9e8] => Array
                (
                    [obj] => stdClass Object
                        (
                        )

                    [inf] => данные для объекта 1
                )

            [0000000001db526f00000000729ed9e8] => Array
                (
                    [obj] => stdClass Object
                        (
                        )

                    [inf] => Array
                        (
                            [0] => 1
                            [1] => 2
                            [2] => 3
                        )

                )

            [0000000001db526800000000729ed9e8] => Array
                (
                    [obj] => stdClass Object
                        (
                        )

                    [inf] => 
                )

        )

)

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

Автор решения: zalex

Не записывать, а потом игнорировать, а "двойная цель".

Вообще говоря я с вами согласен. Перевод документации на русский это большая проблема. Причем явно что проблема не в русском, а обычно, как водится, в переводчике. Русский чувак постоянно хочет всё усложнить.

The SplObjectStorage class provides a map from objects to data or, by ignoring data, an object set.

Здесь говорится о том что SplObjectStorage может служить двояко. Представьте себе что SplObjectStorage это некая структура данных в которой позволительна разная реализация.

Вариант 1 - в SplObjectStorage конкретный объект может быть ключем в массиве к данным. Вариант 2 - SplObjectStorage является набором объектов. (для которых существуют разные ООП style функции).

Вы вольны пользоваться любым из вариантов.

Нужно ли этим пользоваться - ваше решение.

Давайте еще раз - исползование данного класса двояко. У вас вопрос про использования объекта как ключа , есть же использование как набора объектов. Посмотрите реализуемые интерфейсы и в общем то методы и поймете зачем это нужно.

→ Ссылка