🧱 Суть
PSR-12 – это официальный стандарт оформления PHP-кода, разработанный сообществом PHP-FIG.
Он определяет:
- форматирование кода
- расположение фигурных скобок
- отступы
- оформление классов и функций
- порядок импортов
- длину строк
PSR-12 не влияет на работу программы, но делает код единообразным и удобным для чтения.
📦 Проблема
Без единого стиля код быстро становится трудночитаемым.
Например:
class User{
public function save(){echo "saved";}
}Такой код работает, но его сложно читать и поддерживать.
✅ Решение
Следовать стандарту PSR-12 и использовать автоматические форматтеры, например:
- PHP CS Fixer
- PHP_CodeSniffer (PHPCS)
- встроенный форматтер IDE
Это позволяет всей команде придерживаться единого стиля оформления.
💻 Основные правила PSR-12
Отступы
Используются 4 пробела.
Правильно:
if ($isAdmin) {
echo 'Admin';
}Не рекомендуется использовать табуляцию для оформления кода.
Фигурные скобки
Для классов:
class User
{
// ...
}Для методов:
public function save(): void
{
// ...
}Открывающая скобка всегда переносится на новую строку.
Пространства имён
После объявления пространства имён оставляется пустая строка.
namespace App\Services;
use App\Models\User;Импорты
Каждый импорт располагается на отдельной строке.
use App\Models\User;
use App\Services\MailService;
use DateTime;После списка use также оставляется пустая строка.
Объявление класса
Правильно:
class UserService
{
// ...
}Имя класса:
- в PascalCase
- отражает назначение класса
Методы
Правильно:
public function createUser(): User
{
// ...
}Рекомендуется:
- явно указывать типы параметров
- указывать возвращаемый тип
Условия
После ключевых слов ставится пробел.
Правильно:
if ($user === null) {
return;
}Циклы
foreach ($users as $user) {
// ...
}Код внутри блока имеет дополнительный отступ.
Пустые строки
Пустые строки используются для логического разделения частей кода.
Например:
$user = $repository->find($id);
if ($user === null) {
return;
}
$mailService->send($user);Это делает код значительно легче для чтения.
Длина строки
PSR-12 рекомендует:
- мягкий предел – около 120 символов
- при необходимости длинные выражения переносить
Например:
$result = $repository->findUserByEmail(
$email
);Именование
Используются общепринятые соглашения.
| Элемент | Стиль |
|---|---|
| Класс | UserService |
| Интерфейс | UserRepositoryInterface |
| Метод | createUser() |
| Переменная | $userName |
| Константа | MAX_USERS |
Типизация
Современный PHP рекомендует использовать строгую типизацию.
Например:
public function getUser(
int $id
): User
{
// ...
}При необходимости можно включить строгий режим:
declare(strict_types=1);Один класс – один файл
Обычно структура выглядит так:
src/
├── Controllers/
├── Services/
├── Models/
└── Repositories/Каждый класс располагается в отдельном файле.
Частые ошибки
Использовать разные стили оформления
Плохо:
if($user){
echo 'Hi';
}Лучше:
if ($user) {
echo 'Hi';
}Не использовать типизацию
Плохо:
function getUser($id)Лучше:
function getUser(
int $id
): UserБольшие методы
Плохо:
public function process()
{
// 300 строк кода
}Лучше разбивать логику на небольшие методы с одной ответственностью.
Игнорировать автоматическое форматирование
Ручное форматирование легко приводит к различиям в стиле.
Лучше использовать форматтер перед каждым коммитом.
Смешивать разные соглашения
Например:
$user_nameи
$userNameв одном проекте.
Следует придерживаться единого стиля именования.
🎯 Вывод
- PSR-12 – официальный стандарт оформления PHP-кода
- Он делает код единообразным и удобным для чтения
- Следует использовать 4 пробела, понятные отступы и единый стиль именования
- Современный PHP рекомендует строгую типизацию и явные типы параметров
- Один класс обычно располагается в одном файле
- Для соблюдения стандарта лучше использовать автоматические форматтеры