Skip to content

Мета-документ PSR-16

1. Краткое изложение

Кэширование — распространённый способ повышения производительности любого проекта, и многие библиотеки используют его или могут использовать. Совместимость на этом уровне означает, что библиотеки могут отказаться от собственных реализаций кэширования и без труда опираться на ту, что предоставляется фреймворком или другой специализированной библиотекой кэша, выбранной пользователем.

2. Зачем это нужно?

PSR-6 уже решает эту задачу, однако делает это достаточно формально и многословно применительно к самым простым случаям использования. Данный более простой подход направлен на построение стандартизированного уровня простоты поверх существующих интерфейсов PSR-6.

3. Область применения

3.1 Цели

  • Простой интерфейс для операций с кэшем.
  • Базовая поддержка операций над несколькими ключами из соображений производительности (сокращение времени цикла обращения).
  • Предоставление класса-адаптера, превращающего реализацию PSR-6 в реализацию PSR-Simple-Cache.
  • Должна быть возможность предоставлять оба PSR кэширования из одной библиотеки кэша.

3.2 Вне области применения

  • Решение всех возможных граничных случаев — PSR-6 уже справляется с этим.

4. Подходы

Выбранный подход намеренно минималистичен, поскольку предназначен исключительно для простейших случаев использования. Он не обязан реализовываться всеми возможными бэкендами кэша и не претендует на охват всех сценариев. Это лишь уровень удобства поверх PSR-6.

5. Участники

5.1 Редактор(ы)

  • Paul Dragoonis (@dragoonis)

5.2 Спонсоры

  • Jordi Boggiano (@seldaek) — Composer (координатор)
  • Fabien Potencier (@fabpot) — Symfony

5.3 Авторы

За участие в написании первоначальной версии данного PSR кэширования:

  • Evert Pot (@evert)
  • Florin Pățan (@dlsniper)

За роль раннего рецензента:

  • Daniel Messenger (@dannym87)

6. Голосования

  • Голосование о принятии в работу: https://groups.google.com/d/topic/php-fig/vyQTKHS6pJ8/discussion
  • Голосование об утверждении: https://groups.google.com/d/msg/php-fig/A8e6GvDRGIk/HQBJGEhbDQAJ

7. Ссылки по теме

8. Исправления и дополнения

8.1 Throwable

Релиз 2.0 пакета psr/simple-cache обновляет Psr\SimpleCache\CacheException так, чтобы он расширял \Throwable. Это считается обратно совместимым изменением для реализующих библиотек, начиная с PHP 7.4.

8.2 Добавление типов

Релиз 2.0 пакета psr/simple-cache включает скалярные типы параметров и повышает минимальную версию PHP до 8.0. Это считается обратно совместимым изменением для реализующих библиотек, поскольку PHP 7.2 вводит ковариантность для параметров. Любая реализация версии 1.0 совместима с версией 2.0. Однако для вызывающих библиотек это сужает допустимые типы передаваемых значений (ранее принимался любой параметр, приводимый к строке), что требует увеличения мажорной версии.

Релиз 3.0 включает возвращаемые типы. Возвращаемые типы нарушают обратную совместимость для реализующих библиотек, поскольку PHP не поддерживает расширение возвращаемых типов.

Реализующие библиотеки МОГУТ добавлять возвращаемые типы в собственные пакеты по своему усмотрению при условии, что:

  • возвращаемые типы соответствуют типам в пакете версии 3.0;
  • реализация указывает минимальную версию PHP 8.0.0 или выше;
  • реализация зависит от "psr/simple-cache": "^2 || ^3", чтобы исключить нетипизированную версию 1.0.

Реализующие библиотеки МОГУТ добавлять типы параметров в собственный пакет в новом минорном релизе — одновременно с добавлением возвращаемых типов или в последующем релизе — при условии, что:

  • типы параметров соответствуют или расширяют типы из пакета версии 2.0;
  • реализация указывает минимальную версию PHP 8.0 при использовании смешанных или объединённых типов или выше;
  • реализация зависит от "psr/simple-cache": "^2 || ^3", чтобы исключить нетипизированную версию 1.0.

Реализующим библиотекам рекомендуется, хотя и не требуется, при первой же возможности переходить на версию 3.0 пакета.

Вызывающим библиотекам рекомендуется убедиться, что они передают правильные типы, и при первой же возможности обновить зависимость до "psr/simple-cache": "^1 || ^2 || ^3".