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