Ответ
PSR (PHP Standards Recommendation) — это спецификации от PHP-FIG, которые унифицируют разработку на PHP, чтобы код из разных фреймворков и библиотек мог легче взаимодействовать. Вот ключевые стандарты, которые я использую:
1. PSR-4: Autoloader
- Для чего: Стандарт автозагрузки классов через пространства имен. Это основа современного PHP-проекта.
- Как работает: Соответствие между пространством имен
VendorPackageClassNameи путем к файлуvendor/package/src/ClassName.php. - Пример из
composer.json:{ "autoload": { "psr-4": { "MyApp\": "src/" } } }Файл
src/Controller/UserController.phpбудет содержать классMyAppControllerUserController.
2. PSR-12: Extended Coding Style
- Для чего: Детальное руководство по форматированию кода (преемник PSR-2). Использую вместе с инструментами вроде PHP_CodeSniffer или PHP-CS-Fixer для автоматического применения.
- Основные правила:
- 4 пробела на отступ.
- Фигурная скобка класса/метода на новой строке.
- Строгие правила для
use-объявлений, операторов, длины строки.
3. PSR-7: HTTP Message Interface
- Для чего: Определяет интерфейсы для HTTP-запросов и ответов (
PsrHttpMessageRequestInterface,ResponseInterface). - Почему важно: Позволяет писать middleware и компоненты, не зависящие от конкретной реализации (например, от Slim, Guzzle, Laminas).
- Пример создания ответа (с использованием Diactoros):
$response = new LaminasDiactorosResponse(); $response->getBody()->write('Hello World'); return $response->withStatus(200)->withHeader('Content-Type', 'text/plain');
4. PSR-11: Container Interface
- Для чего: Стандартизирует интерфейс контейнера внедрения зависимостей (
PsrContainerContainerInterface). - Почему: Позволяет библиотекам зависеть от абстракции контейнера, а не от конкретной реализации (Symfony DI, PHP-DI, Aura.Di).
5. PSR-3: Logger Interface
- Для чего: Общий интерфейс для логгеров. В своем коде я завишу от
PsrLogLoggerInterface, а пользователь может подставить Monolog, любой другой PSR-3-совместимый логгер или даже заглушку.
Использование этих стандартов — признак зрелого проекта, который легко поддерживать и расширять.