(PHP 8)
Класс WeakMap — карта, или словарь, который принимает объекты как ключи. Однако, объект в ключе экземпляра WeakMap не влияет на счётчик ссылок объекта, в отличие от аналогичного в остальном класса SplObjectStorage. То есть, как только единственной оставшейся ссылкой на объект будет ключ экземпляра WeakMap, сборщик мусора соберёт и удалит объект из экземпляра WeakMap. Основная задача класса — создавать кеши данных, которые получили из объекта, которым не нужно жить дольше, чем объект.
Класс WeakMap реализует интерфейсы ArrayAccess, Traversable (через интерфейс IteratorAggregate) и Countable, поэтому с объектом класса часто работают так же, как с ассоциативным массивом.
Пример #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)