Перейти к основному содержимому

25. Стандарты PSR и PER

PHP Framework Interop Group (PHP-FIG) разрабатывает рекомендации PHP Standard Recommendations (PSR) и PHP Evolved Recommendations (PER), помогающие разработчикам писать совместимый код.

Какой документ PSR описывает базовые стандарты кодирования?​

Junior

Ответ: PSR-1 (ссылка) PSR-1 направлен на обеспечение высокой степени технической совместимости между общим PHP-кодом. Он охватывает базовые элементы кодирования: файлы, пространства имён, классы и методы.

  • Использовать только теги <?php и <?=.
  • Использовать только UTF-8 без BOM для PHP-кода.
  • Файлы должны либо объявлять символы (классы, функции, константы и т.д.), либо вызывать побочные эффекты (генерировать вывод, изменять настройки .ini и т.д.), но не должны делать и то, и другое одновременно.
  • Пространства имён и классы должны соответствовать PSR-4.
  • Имена классов должны записываться в StudlyCaps.
  • Константы классов должны записываться заглавными буквами с разделителями-подчёркиваниями.
  • Имена методов должны записываться в camelCase.

Какой документ PSR описывает расширенные стандарты кодирования?​

Junior

Ответ: PSR-12 (ссылка) PSR-12 является расширением PSR-2 (который он заменял) и предоставляет более полный набор правил стиля кодирования. Примечание: он был заменён «живым» стандартом PER Coding Style.

  • Отступы должны быть 4 пробела, без табуляции.
  • Мягкий лимит длины строки — 80 символов, жёсткий лимит — 120.
  • Фигурные скобки для классов и методов должны располагаться на новой строке.
  • Модификатор видимости должен быть указан для всех свойств и методов.
  • Указание типов обязательно для параметров и возвращаемых значений, где это возможно.

Какой документ PSR описывает автозагрузку?​

Junior

Ответ: PSR-4 (ссылка) PSR-4 описывает спецификацию автозагрузки классов из файловых путей. Это современная замена PSR-0.

  • Он сопоставляет пространства имён со структурой каталогов.
  • Позволяет задавать «префикс» (базовый каталог) для пространства имён.
  • Примечание о PSR-0: PSR-0 был предыдущим стандартом, но был признан устаревшим, так как был менее гибким (например, требовал, чтобы полное пространство имён отражалось в структуре каталогов, а подчёркивания в именах классов интерпретировались как разделители каталогов).

Какой документ PSR описывает простое кеширование?​

Junior

Ответ: PSR-16 (ссылка) Упрощённый интерфейс кеширования, ориентированный на базовые операции get, set, delete и has для простых сценариев использования.


Какой документ PSR описывает интерфейс Clock?​

Junior

Ответ: PSR-20 (ссылка) Вводит ClockInterface для получения текущего времени, позволяя внедрять время для детерминированных тестов и логики, зависящей от времени.


Какой документ PSR описывает интерфейс логирования?​

Middle

Ответ: PSR-3 (ссылка) PSR-3 предоставляет общий интерфейс для библиотек логирования. Он определяет LoggerInterface с методами для 8 уровней логирования (debug, info, notice, warning, error, critical, alert, emergency). Это позволяет приложениям быть независимыми от конкретной реализации логирования (например, Monolog).


Какой документ PSR описывает интерфейс HTTP-сообщений?​

Middle

Ответ: PSR-7 (ссылка) PSR-7 описывает общие интерфейсы для представления HTTP-сообщений (запросов и ответов).

  • HTTP-сообщения являются неизменяемыми (immutable) объектами.
  • Охватывает запросы, ответы, загруженные файлы, URI и потоки.
  • Обеспечивает совместимость между различными библиотеками и фреймворками, работающими с HTTP.

Какой документ PSR описывает HTTP-обработчики?​

Middle

Ответ: PSR-15 (ссылка) PSR-15 определяет интерфейсы для серверных HTTP-компонентов: обработчиков запросов (Request Handlers) и middleware.

  • Middleware позволяет обрабатывать обрабатывать входящие запросы и исходящие ответы слоями.
  • Работает совместно с PSR-7 HTTP-сообщениями, предоставляя стандартный способ обработки веб-запросов.

Какой документ PSR описывает интерфейсы кеширования?​

Middle

Ответ: PSR-6 (ссылка) Предоставляет общие интерфейсы для библиотек кеширования (пулы кеша, элементы и драйверы), позволяя приложениям менять реализации без изменения кода.


Какой документ PSR описывает гипермедиа-ссылки?​

Middle

Ответ: PSR-13 (ссылка) Определяет интерфейсы для представления веб-ссылок (связей между ресурсами), которые можно использовать совместно с библиотеками PSR-7/PSR-18.


Какой документ PSR описывает HTTP-клиент?​

Middle

Ответ: PSR-18 (ссылка) Стандартный интерфейс HTTP-клиента для отправки PSR-7-запросов и получения PSR-7-ответов, отвязывающий приложения от конкретных HTTP-клиентов.


Какой документ PSR описывает интерфейс контейнера?​

Senior

Ответ: PSR-11 (ссылка) PSR-11 предоставляет общий интерфейс для контейнеров внедрения зависимостей.

  • Определяет методы get($id) и has($id).
  • Позволяет библиотекам извлекать записи из контейнера стандартизированным способом, делая их независимыми от конкретного контейнера.

Какой документ PSR описывает диспетчер событий?​

Senior

Ответ: PSR-14 (ссылка) PSR-14 определяет общий интерфейс для диспетчеризации и прослушивания событий.

  • Состоит из диспетчера событий (Event Dispatcher), провайдера слушателей (Listener Provider) и объекта события (Event).
  • Предоставляет стандартный способ реализации точек расширения в PHP-приложениях и библиотеках.

Какой документ PSR описывает фабрики HTTP?​

Senior

Ответ: PSR-17 (ссылка) PSR-17 определяет интерфейсы фабрик для создания PSR-7-совместимых HTTP-объектов.

  • Поскольку объекты PSR-7 являются неизменяемыми, фабрики предоставляют стандартный способ создания новых экземпляров (Request, Response, Stream и др.) без привязки к конкретной реализации.

Что такое PER Coding Style и почему он важен?​

Senior Important

Ответ: PER Coding Style (ссылка) PHP Evolved Recommendation (PER) для стиля кодирования — это современный преемник PSR-12. В отличие от PSR, которые являются статичными после принятия, PER — это «живые документы», которые обновляются для учёта новых возможностей PHP и развивающихся лучших практик.

  • Преемник PSR-12: Расширяет и заменяет PSR-12, при этом по-прежнему требуя соблюдения PSR-1 (базовые стандарты кодирования).
  • Живой стандарт: Обновляется для включения правил для нового синтаксиса PHP: продвижение свойств в конструкторе, перечисления (enum), readonly-свойства и многое другое.
  • Цель: Предоставить полный, развивающийся набор правил стиля кодирования, который идёт в ногу с развитием языка, обеспечивая единообразие кода во всей экосистеме PHP.

Обзор прочих стандартов PSR​

Ниже приведены дополнительные PSR с краткими описаниями и ссылками.

Какие стандарты PSR являются устаревшими или находятся в статусе черновика?​

  • PSR-0: Autoloading Standard — Устаревший, заменён PSR-4.
  • PSR-2: Coding Style Guide — Устаревший, заменён PSR-12.
  • PSR-12: Extended Coding Style — Заменён PER Coding Style.
  • PSR-5: PHPDoc Standard (Draft) — Предложенные правила для docblock-комментариев (черновик).
  • PSR-19: PHPDoc tags (Draft) — Предложенный набор PHPDoc-тегов (черновик).
  • PSR-21: Internationalization (Draft) — Предложенные интерфейсы интернационализации (черновик).
  • PSR-22: Application Tracing (Draft) — Предложенные интерфейсы трассировки (черновик).