PHP 代码审查:检查什么以及如何在实际中提供反馈

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么代码审查不是关于控制,而是关于成长



PHP 中的代码审查不是管理者对下属的陈旧控制程序。这是开发人员之间的专业对话,旨在提高代码质量、在团队内部分享知识并在早期阶段预防错误。然而,实践表明,许多 PHP 开发人员(尤其是初学者)要么害怕审查,要么将其变成空洞的形式。



在本文中,我们将详细分析在审查 PHP 代码时具体要注意什么,如何提出意见以免冒犯同事,以及如何自己从这一过程中获得最大收益。本文内容基于在 PHP 7.4+ 项目以及 Laravel 和 Symfony 等框架上的实际工作经验。



1. 在 PHP 代码中检查什么:实用检查清单



没有通用的清单,但对于 PHP 项目,可以确定 5 个必须通过审查视角检查的关键领域。



1.1. 安全性

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 问题)——应改用 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. 如何提供反馈:从“这很糟糕”到“让我们改进”



代码审查中最难的技能不是发现错误,而是正确地表达出来。糟糕的反馈会扼杀动力。好的反馈能教导并凝聚团队。



2.1. “三明治”法则

内

博客

书籍推荐