Выбор ответа Senior PHP 8.x: enum, readonly, match обновлено
WeakMap для кеша по объектам
Вопрос
Зачем нужен WeakMap (PHP 8.0), если есть SplObjectStorage?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: WeakMap не удерживает ключи, и кеш не течёт. SplObjectStorage и обычные массивы держат сильные ссылки, поэтому кеш вычислений «по объекту» не даёт GC собрать объекты, и в долгоживущих процессах память растёт.
Варианты ответа
WeakMapбыстрее, но в остальном полностью идентиченWeakMapпозволяет использовать строки как ключиWeakMapне удерживает ключи, и кеш не течётправильный ответWeakMapсохраняется между запросами в OPcache
Разбор
SplObjectStorage и обычные массивы держат сильные ссылки, поэтому кеш вычислений «по объекту» не даёт GC собрать объекты, и в долгоживущих процессах память растёт. WeakMap хранит ключи слабо: удалили последнюю ссылку на объект, исчезла и запись. Ключами могут быть только объекты, а жизнь ограничена процессом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.