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?
- Совместимость между разными фреймворками и библиотеками
- Единый стиль кода в команде и между проектами
- Упрощение интеграции сторонних компонентов
- Профессиональный подход к разработке
Как применять PSR в проекте?
-
Установите CodeSniffer с PSR-стандартами:
composer require --dev squizlabs/php_codesniffer
composer require --dev phpcompatibility/php-compatibility
-
Используйте автоматическое исправление:
phpcs --standard=PSR12 src/
phpcbf --standard=PSR12 src/
-
Для автозагрузки (PSR-4) настройте composer.json:
{
"autoload": {
"psr-4": {
"MyVendor\\MyProject\\": "src/"
}
}
}
Резюмируем:
PSR — это набор стандартов, которые помогают PHP-сообществу создавать совместимый, поддерживаемый и профессиональный код. Наиболее важные стандарты включают PSR-1/PSR-12 (стиль кода), PSR-4 (автозагрузка), PSR-7 (HTTP-сообщения) и PSR-11 (контейнеры). Следование этим стандартам значительно упрощает командную разработку и интеграцию компонентов.