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 - Видаляє запис з мапи