Что такое PSR и какие стандарты вы знаете?php-16

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

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

1. PSR-1: Basic Coding Standard

  • Базовые стандарты кодирования:
    • Файлы ДОЛЖНЫ использовать только <?php или <?= теги
    • Файлы ДОЛЖНЫ использовать только UTF-8 без BOM
    • Классы ДОЛЖНЫ быть в PascalCase (например, MyClass)
    • Константы ДОЛЖНЫ быть в UPPER_SNAKE_CASE
    • Методы ДОЛЖНЫ быть в camelCase

2. PSR-2: Coding Style Guide

  • Расширяет PSR-1 с детальными правилами форматирования:
    • 4 пробела для отступов (не табы)
    • Строки ДОЛЖНЫ быть не длиннее 120 символов
    • После названия класса и метода ДОЛЖНА быть одна пустая строка
    • Открывающая фигурная скобка ДОЛЖНА быть на новой строке для классов и методов

3. PSR-4: Autoloader

  • Стандарт автозагрузки классов:
    • Полное имя класса соответствует файловой структуре
    • Пример сопоставления:
      \Vendor\Namespace\ClassName => /path/to/project/vendor/Namespace/ClassName.php
      
    • Позволяет отказаться от require_once в пользу автоматической загрузки

4. PSR-7: HTTP Message Interface

  • Интерфейсы для работы с HTTP-сообщениями:
    • Psr\Http\Message\RequestInterface
    • Psr\Http\Message\ResponseInterface
    • Psr\Http\Message\ServerRequestInterface
    • Psr\Http\Message\StreamInterface
    • Psr\Http\Message\UploadedFileInterface
    • Стал основой для многих HTTP-библиотек (Guzzle, Slim и др.)

5. PSR-11: Container Interface

  • Стандартизированный интерфейс для контейнеров внедрения зависимостей:
    interface ContainerInterface {
        public function get($id);
        public function has($id);
    }
    
    • Используется в Symfony, Laravel, PHP-DI и других контейнерах

6. PSR-12: Extended Coding Style

  • Уточнение и расширение PSR-2:
    • Более строгие правила для операторов
    • Правила для use-объявлений
    • Требования к пробелам вокруг операторов

7. PSR-15: HTTP Server Request Handlers

  • Стандарт для middleware и обработчиков HTTP-запросов:
    • RequestHandlerInterface
    • MiddlewareInterface
    • Основа для middleware-архитектур

8. PSR-16: Simple Cache

  • Стандартизированный интерфейс для кэширования:
    interface CacheInterface {
        public function get($key, $default = null);
        public function set($key, $value, $ttl = null);
        // ... и другие методы
    }
    

Зачем нужны PSR?

  1. Совместимость между разными фреймворками и библиотеками
  2. Единый стиль кода в команде и между проектами
  3. Упрощение интеграции сторонних компонентов
  4. Профессиональный подход к разработке

Как применять PSR в проекте?

  1. Установите CodeSniffer с PSR-стандартами:

    composer require --dev squizlabs/php_codesniffer
    composer require --dev phpcompatibility/php-compatibility
    
  2. Используйте автоматическое исправление:

    phpcs --standard=PSR12 src/
    phpcbf --standard=PSR12 src/
    
  3. Для автозагрузки (PSR-4) настройте composer.json:

    {
        "autoload": {
            "psr-4": {
                "MyVendor\\MyProject\\": "src/"
            }
        }
    }
    

Резюмируем:

PSR — это набор стандартов, которые помогают PHP-сообществу создавать совместимый, поддерживаемый и профессиональный код. Наиболее важные стандарты включают PSR-1/PSR-12 (стиль кода), PSR-4 (автозагрузка), PSR-7 (HTTP-сообщения) и PSR-11 (контейнеры). Следование этим стандартам значительно упрощает командную разработку и интеграцию компонентов.