🧱 Суть

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 рекомендует строгую типизацию и явные типы параметров
  • Один класс обычно располагается в одном файле
  • Для соблюдения стандарта лучше использовать автоматические форматтеры

🔗 Связано