Введение
PHP Manual
PHP Manual»Встроенные интерфейсы и классы»WeakMap

Класс WeakMap

(PHP 8)

Класс WeakMap — карта, или словарь, который принимает объекты как ключи. Но, в отличие от аналогичного в остальном класса SplObjectStorage, PHP не учитывает объект в ключе карты WeakMap при подсчёте ссылок на объект. Поэтому, как только единственной ссылкой на объект останется ключ в экземпляре класса 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)
To Top