Почему в 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 шт):
Не записывать, а потом игнорировать, а "двойная цель".
Вообще говоря я с вами согласен. Перевод документации на русский это большая проблема. Причем явно что проблема не в русском, а обычно, как водится, в переводчике. Русский чувак постоянно хочет всё усложнить.
The SplObjectStorage class provides a map from objects to data or, by ignoring data, an object set.
Здесь говорится о том что SplObjectStorage может служить двояко. Представьте себе что SplObjectStorage это некая структура данных в которой позволительна разная реализация.
Вариант 1 - в SplObjectStorage конкретный объект может быть ключем в массиве к данным. Вариант 2 - SplObjectStorage является набором объектов. (для которых существуют разные ООП style функции).
Вы вольны пользоваться любым из вариантов.
Нужно ли этим пользоваться - ваше решение.
Давайте еще раз - исползование данного класса двояко. У вас вопрос про использования объекта как ключа , есть же использование как набора объектов. Посмотрите реализуемые интерфейсы и в общем то методы и поймете зачем это нужно.