PSR-стандарты

PSR-стандарты (англ. PHP Standard Recommendations, далее — PSR) — это набор согласованных рекомендаций по разработке на языке PHP, публикуемых сообществом PHP-FIG. Их цель — установить единые технические и стилистические правила, которые делают код различных библиотек и фреймворков взаимозаменяемым и понятным для любой команды разработчиков[1].

Общие сведения
PSR-стандарты
англ. PHP Standard Recommendations
Область использования Разработка программного обеспечения, PHP
Автор понятия PHP Framework Interoperability Group

Определение

PSR-стандарты представляют собой:

  • формальные документы, описывающие требования к синтаксису, интерфейсам и соглашениям кода на PHP
  • результат консенсуса участников сообщества PHP-FIG — лидеров популярных фреймворков и библиотек
  • рекомендации (а не обязательные нормы), которые де-факто рассматриваются как промышленный стандарт в профессиональной среде[2]

Основные задачи PSR:

  1. Упрощение совместной работы над проектами любой величины
  2. Повышение читаемости и предсказуемости кода
  3. Обеспечение совместимости компонентов из разных экосистем
  4. Снижение затрат на поддержку и расширение приложений[1]

Структура PSR-стандартов

PSR охватывают несколько функциональных областей.

  • Стиль кодирования
    • PSR-1 — Basic Coding Standard (принят)[3]
    • PSR-2 — Coding Style Guide (устарел, заменён PSR-12)[4]
    • PSR-12 — Extended Coding Style Guide (принят, актуальная версия)
  • Автозагрузка
    • PSR-0 — Autoloading Standard (устарел, заменён PSR-4)
    • PSR-4 — Autoloading Standard (принят)
  • Логирование
    • PSR-3 — Logger Interface (принят)
  • Кэширование
    • PSR-6 — Caching Interface (принят)
    • PSR-16 — Simple Cache (принят)
  • HTTP-сообщения и клиенты
    • PSR-7 — HTTP Message Interface (принят)
    • PSR-15 — HTTP Handlers и Middleware (принят)
    • PSR-17 — HTTP Factories (принят)
    • PSR-18 — HTTP Client (принят)[5]
  • Контейнеры зависимостей
    • PSR-11 — Container Interface (принят)[6]
  • События и гипермедиа
    • PSR-13 — Hypermedia Links (принят)
    • PSR-14 — Event Dispatcher (принят)
  • Прочие стандарты
    • PSR-20 — Clock (принят)
    • PSR-5 — PHPDoc Standard (черновик)
    • PSR-19 — PHPDoc tags (черновик)

Этапы разработки и утверждения PSR-стандартов

Процесс создания и утверждения PSR-стандартов в PHP-FIG включает несколько последовательных этапов.

1. Предложение (Drafting)

Инициатор, представляющий одного из членов FIG, публикует черновик документа. На этом этапе формулируются основные положения будущего стандарта, его цели и область применения.

2. Обсуждение (Review)

Черновик открыт для комментариев участников FIG и широкой аудитории разработчиков. Внесённые правки фиксируются в репозитории GitHub. Обсуждение позволяет выявить спорные моменты, собрать предложения по улучшению и достичь предварительного консенсуса.

3. Голосование (Voting)

После достижения консенсуса документ выносится на электронное голосование среди представителей членов FIG. Для принятия стандарта требуется квалифицированное большинство (обычно 2/3 голосов «за»).

4. Принятие (Accepted)

При положительном исходе голосования стандарт получает номер PSR. На этом этапе фиксируется финальная редакция документа.

5. Публикация (Publication)

Текст PSR размещается на официальном сайте php-fig.org и становится доступен для внедрения в проекты и библиотеки.

В процессе участвуют:

  • автор/инициатор предложения
  • голосующие представители фреймворков и библиотек-членов FIG
  • технический комитет FIG, контролирующий соблюдение регламента
  • сообщество PHP, предоставляющее обратную связь[6]

Преимущества и недостатки

Преимущества

  • Единообразный стиль и архитектура кода во всех проектах[1]
  • Лёгкая интеграция сторонних библиотек благодаря унифицированным интерфейсам (PSR-3, PSR-7 и др.)
  • Снижение когнитивной нагрузки при код-ревью и обучении новых сотрудников[2]
  • Богатая экосистема инструментов автоматической проверки (PHP_CodeSniffer, PHP-CS-Fixer)
  • Повышение надёжности и безопасности приложений через стандартизированные подходы[1]

Недостатки

  • Некоторые стандарты могут опережать или, наоборот, отставать от развития языка, что ведёт к ревизиям и устареванию (PSR-0, PSR-2)[4]
  • Предписывающий характер руководств по стилю не всегда совпадает с личными предпочтениями команд
  • Для небольших проектов строгое следование всем PSR может быть избыточным
  • Существуют критические замечания к отдельным абстракциям, например к ContainerInterface (PSR-11), который не учитывает строгую типизацию[7]

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

PSR используются:

  • в крупных фреймворках (Symfony, Laravel, Laminas), которые полностью придерживаются PSR-1/12, PSR-3, PSR-4 и других стандартов
  • при создании пакетов для Composer — автозагрузка по PSR-4
  • в микросервисах и REST-API на базе PSR-7 сообщений и PSR-15 middleware (Slim, Mezzio)
  • в системах логирования (Monolog — реализация PSR-3)
  • при кэшировании данных (Symfony Cache, Laravel Cache — PSR-6/16)
  • в тестах, где требуется контролируемое время исполнения (PSR-20 — Clock)

Реализации и инструменты

  • Стиль кода (PSR-1/12)
    • PHP_CodeSniffer — проверка соответствия коду стандартам
    • PHP-CS-Fixer — автоматическое исправление нарушений[8]
  • Логирование (PSR-3)
    • Monolog — гибкая библиотека с десятками обработчиков[9]
  • Автозагрузка (PSR-4)
    • Composer — генерация автозагрузчика и управление зависимостями[10]
  • Кэширование (PSR-6/16)
    • Symfony Cache — адаптеры Redis, Memcached, Filesystem[11]
  • HTTP-сообщения и клиенты (PSR-7/15/17/18)
    • Laminas Diactoros и Nyholm PSR-7 — реализации HTTP-сообщений[12][13]
    • Guzzle и Symfony HTTP Client — клиенты, совместимые с PSR-18
  • Контейнеры зависимостей (PSR-11)
    • PHP-DI, Symfony Service Container, Laravel Container — взаимозаменяемые реализации[6]
  • Система событий (PSR-14)
    • Symfony EventDispatcher и библиотека league/event — обработка и рассылка событий

Примечания

Категории

© Правообладателем данного материала является АНО «Интернет-энциклопедия «РУВИКИ».
Использование данного материала на других сайтах возможно только с согласия АНО «Интернет-энциклопедия «РУВИКИ».