WeakMap — это карта (или словарь), которая принимает объекты в качестве ключей. Однако, в отличие от аналогичного SplObjectStorage , объект в ключе WeakMap не влияет на счетчик ссылок объекта. То есть, если в какой-то момент единственной оставшейся ссылкой на объект является ключ WeakMap , объект будет удален сборщиком мусора и удален из WeakMap . Его основной вариант использования — создание кешей данных, полученных из объекта, которым не нужно жить дольше, чем сам объект.

WeakMap реализует ArrayAccess , Iterator и Countable , поэтому в большинстве случаев его можно использовать так же, как ассоциативный массив.

final class WeakMap implements ArrayAccess, Countable, IteratorAggregate {
/* Methods */
public __construct()
public count(): int
public getIterator(): Iterator
public offsetExists(object $object): bool
public offsetGet(object $object): mixed
public offsetSet(object $object, mixed $value): void
public offsetUnset(object $object): void
}

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

<?php
$wm = new WeakMap();

$o = new StdClass;

class A {
    public function __destruct() {
        echo "Dead!\n";
    }
}

$wm[$o] = new A;

var_dump(count($wm));
echo "Unsetting...\n";
unset($o);
echo "Done\n";
var_dump(count($wm));

Методы:

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