Введение: почему code review — это не про контроль, а про рост
Code review (ревью кода) в PHP — это не архаичная процедура контроля начальника над подчинённым. Это профессиональный диалог между разработчиками, направленный на повышение качества кода, распространение знаний внутри команды и предотвращение ошибок на ранних этапах. Однако, как показывает практика, многие PHP-разработчики (особенно на старте) либо боятся ревью, либо превращают его в пустую формальность.
В этой статье мы разберём, на что конкретно обращать внимание при code review PHP-кода, как формулировать замечания, чтобы не обидеть коллегу, и как самому извлекать максимум пользы из этого процесса. Материал основан на реальном опыте работы с проектами на PHP 7.4+ и фреймворках вроде Laravel и Symfony.
1. Что проверять в PHP-коде: практический чек-лист
Универсального списка не существует, но для PHP-проектов можно выделить 5 ключевых зон, которые обязательно нужно прогнать через призму ревью.
1.1. Безопасность (Security)
PHP — язык, где легко допустить уязвимость. Первым делом проверяем:
- SQL-инъекции: используются ли подготовленные запросы (PDO / prepared statements) вместо конкатенации строк?
- XSS (межсайтовый скриптинг): экранируется ли вывод через
htmlspecialchars()или шаблонизаторы (Blade, Twig)? - CSRF-защита: есть ли токены на формах, изменяющих состояние?
- Валидация ввода: проверяется ли тип и длина данных на серверной стороне?
// Плохо: конкатенация в SQL
$query = "SELECT * FROM users WHERE id = " . $_GET['id'];
// Хорошо: подготовленный запрос PDO
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute(['id' => $_GET['id']]);
1.2. Архитектура и SOLID
Даже если проект — не энтерпрайз, базовые принципы должны соблюдаться:
- Единая ответственность: не делает ли класс/метод слишком много?
- Инверсия зависимостей: использует ли код интерфейсы вместо конкретных классов?
- Отсутствие божественных объектов: нет ли классов на 1000+ строк?
1.3. Стиль и PSR-стандарты
Для PHP это критично. Проверяем соответствие PSR-12 (стиль кодирования):
- Отступы — 4 пробела, а не табуляция.
- Фигурные скобки на новой строке для классов и методов.
- Правильное именование:
camelCaseдля методов,snake_caseдля переменных (если это не принято иначе в проекте).
1.4. Производительность
В PHP легко написать медленный код. Ищем:
- Запросы в цикле (N+1 проблема) — вместо этого используйте жадную загрузку (Eager Loading) в ORM.
- Игнорирование кэша: повторные вычисления одних и тех же данных.
- Неэффективные функции: например,
in_array()на большом массиве лучше заменить наisset($hash[$key]).
// Плохо: запрос в цикле
foreach ($users as $user) {
$posts = DB::table('posts')->where('user_id', $user->id)->get();
}
// Хорошо: один запрос с жадной загрузкой
$users = User::with('posts')->get();
1.5. Обработка ошибок и типизация
- Есть ли strict_types в начале файла?
- Используются ли типы для аргументов и возвращаемых значений?
- Обрабатываются ли исключения, а не глушатся голым
try-catch?
2. Как давать обратную связь: от "это плохо" до "давай улучшим"
Самый сложный навык в code review — это не найти ошибку, а правильно её преподнести. Плохая обратная связь убивает мотивацию. Хорошая — учит и сближает команду.
2.1. Правило "Сэндвича"
Начинайте с позитива, затем — конструктивная критика, и снова позитив в конце. Пример:
- ✅ "Отлично, что ты вынес логику в отдельный сервис — это сильно упростит тестирование."
- ⚠️ "Однако здесь лучше использовать интерфейс вместо конкретного класса, чтобы мы могли легко подменить реализацию."
- ✅ "В остальном код чистый, молодец!"
2.2. Конкретика вместо общих фраз
Вместо "этот код плохой" скажите: "В строке 45 есть потенциальная уязвимость XSS. Давай добавим экранирование через e() в шаблоне."
2.3. Разделяйте "must have" и "nice to have"
Не все правки обязательны. Используйте теги:
- Блокирующие (blocker): баги, уязвимости, нарушение логики.
- Рекомендации (suggestion): улучшение читаемости, рефакторинг.
- Вопросы (question): "Почему выбран этот подход?" — иногда это раскрывает неочевидные требования.
2.4. Избегайте "собственнического" языка
Говорите "мы" и "код", а не "ты" и "твой код". Сравните:
- ❌ "Ты написал ужасный запрос."
- ✅ "В этом запросе есть проблема N+1. Давай попробуем оптимизировать его через join."
3. Типичные ошибки новичков в PHP code review (и как их избежать)
Даже опытные разработчики иногда скатываются в