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