# Класс SplObjectStorage

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

## Введение

Класс SplObjectStorage предоставляет отображение объектов в данные или набор объектов, игнорируя данные. Эта двойная цель может быть полезна во многих случаях, включая необходимость уникальной идентификации объектов.

## Обзор класса

class SplObjectStorage implements Countable, SeekableIterator, Serializable, ArrayAccess {
/* Методы */
public function addAll(SplObjectStorage `$storage`): int
#[\Deprecated]
public function attach(object `$object`, mixed `$info` = null): void
#[\Deprecated]
public function contains(object `$object`): bool
public function count(int `$mode` = COUNT_NORMAL): int
public function current(): object
#[\Deprecated]
public function detach(object `$object`): void
public function getHash(object `$object`): string
public function getInfo(): mixed
public function key(): int
public function next(): void
public function offsetExists(object `$object`): bool
public function offsetGet(object `$object`): mixed
public function offsetSet(object `$object`, mixed `$info` = null): void
public function offsetUnset(object `$object`): void
public function removeAll(SplObjectStorage `$storage`): int
public function removeAllExcept(SplObjectStorage `$storage`): int
public function rewind(): void
public function seek(int `$offset`): void
public function serialize(): string
public function setInfo(mixed `$info`): void
public function unserialize(string `$data`): void
public function valid(): bool
}

## Примеры

Пример #1 Класс SplObjectStorage как набор объектов

    <?php
    // Набор объектов
    $s = new SplObjectStorage();

    $o1 = new stdClass;
    $o2 = new stdClass;
    $o3 = new stdClass;

    $s->attach($o1);
    $s->attach($o2);

    var_dump($s->contains($o1));
    var_dump($s->contains($o2));
    var_dump($s->contains($o3));

    $s->detach($o2);

    var_dump($s->contains($o1));
    var_dump($s->contains($o2));
    var_dump($s->contains($o3));
    ?>

Результат выполнения приведённого примера:

    bool(true)
    bool(true)
    bool(false)
    bool(true)
    bool(false)
    bool(false)

Пример #2 Класс SplObjectStorage как отображение объектов в данные

    <?php
    // Как отображение объектов к данным
    $s = new SplObjectStorage();

    $o1 = new stdClass;
    $o2 = new stdClass;
    $o3 = new stdClass;

    $s[$o1] = "данные для объекта 1";
    $s[$o2] = array(1,2,3);

    if (isset($s[$o2])) {
        var_dump($s[$o2]);
    }
    ?>

Результат выполнения приведённого примера:

    array(3) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
    }

## Список изменений

Версия | Описание
--- | ---
8.4.0 | Класс реализует интерфейс SeekableIterator; ранее был реализован только интерфейс Iterator.

## Содержание

- SplObjectStorage::addAll — Добавляет все объекты из другого контейнера
- SplObjectStorage::attach — Добавляет объект в хранилище
- SplObjectStorage::contains — Проверяет, содержит ли хранилище конкретный объект
- SplObjectStorage::count — Возвращает количество объектов в контейнере
- SplObjectStorage::current — Возвращает текущий объект
- SplObjectStorage::detach — Удаляет значение object из хранилища
- SplObjectStorage::getHash — Вычисляет уникальный идентификатор для объектов контейнера
- SplObjectStorage::getInfo — Возвращает данные, ассоциированные с текущим объектом
- SplObjectStorage::key — Возвращает индекс текущего положения итератора
- SplObjectStorage::next — Переход к следующему объекту
- SplObjectStorage::offsetExists — Проверяет, существует ли объект в контейнере
- SplObjectStorage::offsetGet — Возвращает данные, ассоциированные с объектом object
- SplObjectStorage::offsetSet — Ассоциирует данные с объектом в контейнере
- SplObjectStorage::offsetUnset — Удаляет объект из контейнера
- SplObjectStorage::removeAll — Удаляет из текущего контейнера объекты, которые есть в другом контейнере
- SplObjectStorage::removeAllExcept — Удаляет из текущего контейнера все объекты, которых нет в другом контейнере
- SplObjectStorage::rewind — Переводит итератор на первый элемент контейнера
- SplObjectStorage::seek — Перемещает указатель в итераторе
- SplObjectStorage::serialize — Сериализует контейнер
- SplObjectStorage::setInfo — Ассоциирует данные с текущим объектом контейнера
- SplObjectStorage::unserialize — Восстанавливает сериализованый контейнер из строки
- SplObjectStorage::valid — Определяет, допустимо ли текущее значение итератора

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open