Что такое Weak References и WeakMap?

Ответ

WeakReference (PHP 7.4+) - ссылка на объект, которая не препятствует сборке мусора:

$obj = new stdClass();
$weak = WeakReference::create($obj);
echo $weak->get() !== null; // true

unset($obj);
echo $weak->get(); // null (объект удален GC)

WeakMap (PHP 8.0+) - хеш-таблица, где ключами являются объекты, и записи автоматически удаляются при уничтожении объекта-ключа:

$cache = new WeakMap();
$user = new User();
$cache[$user] = ['computed' => 'data'];

unset($user);
// запись автоматически удалена из $cache

WeakMap идеален для кешей, привязанных к объектам (ORM, DI-контейнеры) - предотвращает утечки памяти.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.