# Класс WeakMap

(PHP 8)

## Введение

Класс WeakMap — карта, или словарь, который принимает объекты как ключи. Однако, PHP не учитывает объект в ключе экземпляра класса WeakMap при подсчёте ссылок на объект, в отличие от аналогичного в остальном класса SplObjectStorage. Поэтому как только единственной ссылкой на объект останется ключ экземпляра класса WeakMap, сборщик мусора соберёт и удалит объект из экземпляра WeakMap. Главное назначение класса — создавать кеши данных, которые получили из объекта и которым не требуется жить дольше, чем сам объект.

Класс WeakMap реализует интерфейсы ArrayAccess, Traversable (через интерфейс IteratorAggregate) и Countable, поэтому с объектом класса часто работают так же, как с ассоциативным массивом.

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

final class WeakMap implements ArrayAccess, Countable, IteratorAggregate {
/* Методы */
public function count(): int
public function getIterator(): Iterator
public function offsetExists(object `$object`): bool
public function offsetGet(object `$object`): mixed
public function offsetSet(object `$object`, mixed `$value`): void
public function offsetUnset(object `$object`): void
}

## Примеры

Пример #1 Пример использования класса Weakmap

    <?php

    $wm = new WeakMap();

    $o = new stdClass;

    class A {
        public function __destruct() {
            echo "Уничтожено!\n";
        }
    }

    $wm[$o] = new A;

    var_dump(count($wm));
    echo "Сброс...\n";
    unset($o);
    echo "Готово\n";
    var_dump(count($wm));

    ?>

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

    int(1)
    Сброс...
    Уничтожено!
    Готово
    int(0)

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

- WeakMap::count — Подсчитывает количество живых записей в коллекции (map)
- WeakMap::getIterator — Получает внешний итератор
- WeakMap::offsetExists — Проверяет, есть ли в коллекции (map) определённый объект
- WeakMap::offsetGet — Возвращает значение, на которое указывает конкретный объект
- WeakMap::offsetSet — Обновляет коллекцию (map) новой парой ключ-значение
- WeakMap::offsetUnset — Удаляет запись из коллекции (map)

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