Введение: зачем нужен 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 — это не экзамен, а