@topuserman

PHP RFC: Weak References, в чем смысл?

Прочитал PHP 8 RFC: Weak References, и возможно, не совсем понял проблему, и решение из rfc.

Насколько понял, часто бывает необходимо закешировать работу какого-то метода.

Например:

class OrderItem {

      private $cahceData = [];

      public function export(int $orderId): array {
            if (isset($this->cahceData[$orderId])) {
                   return $this->cahceData[$orderId];
             }
            // ... fill $data
            return ($this->cahceData[$orderId] = $data);
      }

}


Проблема в том, что объект класса OrderItem не будет удален сборщиком мусора, т.к. содержит в себе состояние - $cacheData ?

А решение из rfc делает тоже самое, только глобально, чтобы не держать состояние кеша в самом объекте ? или что ?
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Сборщик мусора не удаляет данные, на которые то-то ссылается. Но если ссылка слабая (weak) то он может удалить.
Вот в статье про js-овский WeakMap неплохо описан принцип.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы