WeakMap
Оновлено: 11.05.2023
(PHP 8)
WeakMap - це карта (або словник), яка приймає об'єкти як ключі. Однак, на відміну від схожого в інших відношеннях SplObjectStorage, об'єкт у ключі WeakMap не додається до лічильника посилань на об'єкт. Тобто, якщо в якийсь момент єдиним посиланням на об'єкт, що залишилося, є ключ WeakMap, цей об'єкт буде зібрано у сміття і видалено з WeakMap. Основне застосування - створення кешу даних, отриманих від об'єкта, які не повинні жити довше, ніж сам об'єкт.
WeakMap реалізує ArrayAccess, Iterator і Countable, тому в більшості випадків його можна використовувати так само, як і асоціативний масив.
Приклад #1 Приклад використання слабкої карти
<?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::count - Підраховує кількість живих записів на карті WeakMap::getIterator - Отримати зовнішній ітератор WeakMap::offsetExists - Перевіряє, чи існує певний об'єкт у карті WeakMap::offsetGet - Повертає значення, на яке вказує певний об'єкт WeakMap::offsetSet - Оновлює мапу новою парою ключ-значення WeakMap::offsetUnset - Видаляє запис з мапи