Code review в PHP: что проверять и как давать обратную связь для начинающих

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: зачем нужен code review в PHP?

Code review (ревью кода) — это процесс, при котором один или несколько разработчиков проверяют код, написанный коллегой, до того как он попадёт в основную ветку проекта. Для начинающих PHP-разработчиков эта практика может казаться пугающей, но на самом деле это мощный инструмент роста. Code review помогает не только найти баги, но и улучшить архитектуру, безопасность и читаемость кода. В этой статье мы разберём, на что обращать внимание при проверке PHP-кода и как давать обратную связь, чтобы она была полезной, а не обидной.

1. Что проверять в PHP-коде: основные категории

Чтобы ревью было структурированным, разделите проверку на несколько ключевых областей. Это поможет не упустить важные детали и дать автору чёткие рекомендации.

1.1. Синтаксис и стандарты кодирования (PSR)

Первое, что бросается в глаза — это стиль кода. PHP-сообщество разработало стандарты PSR (PHP Standards Recommendations), которые упрощают чтение и поддержку кода. Проверьте:

  • Соответствие PSR-12 (отступы, пробелы, фигурные скобки).
  • Именование классов (CamelCase), методов и переменных (camelCase).
  • Отсутствие лишних пробелов и пустых строк.

Пример плохого стиля:

class userController{
function getUser($id){
return $id;
}
}

Пример хорошего стиля (PSR-12):

class UserController
{
    public function getUser(int $id): ?User
    {
        return $id;
    }
}

1.2. Безопасность

PHP — язык, где легко допустить уязвимости. Особенно внимательно проверяйте:

  • SQL-инъекции: используйте подготовленные запросы (PDO или mysqli), а не конкатенацию строк.
  • XSS (межсайтовый скриптинг): экранируйте вывод с помощью htmlspecialchars().
  • Проверка типов: используйте строгую типизацию (declare(strict_types=1);).

Пример небезопасного кода:

$sql = "SELECT * FROM users WHERE id = " . $_GET['id'];
$result = mysqli_query($conn, $sql);

Безопасный вариант:

$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute(['id' => (int)$_GET['id']]);

1.3. Производительность и логика

Проверяйте, не делает ли код лишних операций. Например:

  • Избегайте запросов в цикле — используйте JOIN или подзапросы.
  • Не используйте @ для подавления ошибок — это скрывает проблемы.
  • Проверяйте, что функции не делают слишком много (принцип единственной ответственности).

Пример медленного кода:

foreach ($userIds as $id) {
    $user = User::find($id); // N запросов
}

Оптимизированный вариант:

$users = User::whereIn('id', $userIds)->get(); // 1 запрос

2. Как давать обратную связь: правила для начинающих

Даже если вы нашли много ошибок, важно подать информацию так, чтобы автор не воспринял её в штыки. Вот несколько принципов.

2.1. Будьте конкретны и объективны

Вместо «этот код плохой» напишите: «В строке 12 используется конкатенация SQL, что может привести к инъекции. Рекомендую заменить на подготовленный запрос». Объясняйте почему это проблема, а не просто указывайте на неё.

2.2. Используйте «сэндвич» обратной связи

Начните с позитивного комментария, затем укажите на недостатки, и закончите конструктивным советом. Например:

«Отлично, что вы использовали типизацию для аргументов! Однако метод getUser() возвращает строку, а не объект User — это может сломать типизацию в других местах. Предлагаю изменить возвращаемый тип на User или null.»

2.3. Предлагайте альтернативы, а не критикуйте

Вместо «Уберите этот костыль» напишите: «В PHP 8+ есть match-выражение, которое сделает код чище. Вот пример:». Покажите, как исправить, используя современные возможности PHP.

3. Типичные ошибки начинающих при ревью PHP

Чтобы ревью было эффективным, избегайте следующих ловушек.

3.1. Слишком много субъективных замечаний

Не стоит спорить о том, ставить ли пробел перед скобкой, если это не нарушает PSR. Сосредоточьтесь на логике и безопасности.

3.2. Игнорирование контекста

Код может быть написан под жёсткие дедлайны. Если вы видите, что функция работает, но не идеальна, спросите: «Это временное решение? Если да, добавьте TODO-комментарий». Не требуйте идеала сразу.

3.3. Отсутствие пояснений для новичков

Если автор — джун, объясните, почему PDO лучше mysql_*. Не просто говорите «используй PDO», а добавьте ссылку на документацию или короткий пример.

4. Инструменты для автоматизации code review в PHP

Чтобы не тратить время на рутинные проверки, используйте автоматические анализаторы. Они снимут часть нагрузки и позволят сосредоточиться на архитектуре.

  • PHP_CodeSniffer — проверяет соответствие PSR-12.
  • PHPStan — находит ошибки типов и неиспользуемый код.
  • Psalm — статический анализ с фокусом на безопасность.
  • SonarQube — комплексный анализ качества кода.

Пример настройки PHP_CodeSniffer в composer.json:

"scripts": {
    "cs-check": "phpcs --standard=PSR12 src/"
}

Заключение

Code review в PHP — это не экзамен, а

Блоги

Рекомендаций по книгам