Что такое PSR в PHP?

Ответ

PSR (PHP Standards Recommendation) — это набор стандартов, разработанных группой PHP-FIG (Framework Interop Group) для обеспечения совместимости и единообразия кода в экосистеме PHP.

Основные стандарты:

  • PSR-1 (Basic Coding Standard) и PSR-12 (Extended Coding Style Guide): определяют базовый стиль кодирования (именование, структура файлов, отступы).
  • PSR-4 (Autoloading Standard): стандарт автозагрузки классов через пространства имён и файловую структуру. Это основа современной автозагрузки через Composer.
  • PSR-7 (HTTP Message Interface): определяет интерфейсы для HTTP-запросов и ответов, что позволяет создавать взаимозаменяемые компоненты для работы с HTTP.
  • PSR-11 (Container Interface): стандартизирует интерфейс контейнера внедрения зависимостей (DI).
  • PSR-14 (Event Dispatcher): определяет интерфейсы для системы событий (event dispatcher).

Практический пример PSR-4 в composer.json:

{
    "autoload": {
        "psr-4": {
            "MyApp\": "src/"
        }
    }
}

После этого класс MyAppServiceUserService будет автоматически загружен из файла src/Service/UserService.php. Следование PSR упрощает интеграцию сторонних библиотек и поддержку кода.

Ответ 18+ 🔞

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

Так вот, умные дядьки из PHP-FIG сели и сказали: «Хуй с горы, давайте договоримся, как писать, чтобы не было потом „а чё это у тебя тут?“». Это и есть PSR — рекомендации, как делать по-человечески.

Что там у них по полочкам:

  • PSR-1 и PSR-12 — это типа устава. Где фигурную скобку ставить, как переменные называть, чтобы код читался, а не выглядел как послание инопланетян. Без этого — ты распиздяй, смерд пердящий.
  • PSR-4 — вот это, блядь, магия! Раньше надо было кучу require_once писать, а теперь ты просто говоришь: «Смотри, чувак, всё что в папке src/ и начинается с MyApp — это мои классы». И система сама всё найдёт. Ёперный театр, удобно же!
  • PSR-7 — про HTTP, запросы-ответы. Сделали общие интерфейсы, чтобы твой код мог работать с запросом от Symfony, а завтра — от Slim. Универсальная хуйня, короче.
  • PSR-11 — про контейнеры зависимостей. Стандартная «коробка», куда ты складываешь свои сервисы, чтобы потом не писать new везде, где попало.
  • PSR-14 — про события. Чтоб можно было крикнуть «эй, тут пользователя создали!», а кто надо — услышит и сделает своё дело.

Вот смотри, как эта магия PSR-4 в composer.json выглядит:

{
    "autoload": {
        "psr-4": {
            "MyApp\": "src/"
        }
    }
}

Объясняю на пальцах: написал ты класс MyAppServiceUserService. Система смотрит на эту хуйню, видит MyApp, лезет в папку src/, ищет там Service/UserService.php — и всё, класс готов, можно использовать. Никаких заклинаний, просто красота.

Если не следовать этим штукам, то твой код будет как хитрая жопа — непредсказуемый и с ним никто не захочет работать. А так — всё прозрачно, и библиотеки друг с другом дружат. Сам от себя охуеешь, насколько жизнь проще становится.