PHP中的代码审查:检查什么以及如何给初学者提供反馈

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

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

开始课程

引言:为什么需要在PHP中进行代码审查?

代码审查(Code review)是一个或多个开发者在代码被合并到项目主分支之前,对同事编写的代码进行检查的过程。对于初学PHP的开发者来说,这种做法可能看起来令人畏惧,但实际上它是一个强大的成长工具。代码审查不仅有助于发现错误,还能改进架构、安全性和代码可读性。在本文中,我们将讨论在检查PHP代码时需要注意什么,以及如何提供有用而非伤人的反馈。



1. PHP代码中需要检查什么:主要类别

为了让审查有条理,可以将检查分为几个关键领域。这有助于不遗漏重要细节,并为作者提供清晰的建议。



1.1. 语法和编码标准(PSR)

首先映入眼帘的是代码风格。PHP社区制定了PSR(PHP标准建议)标准,以简化代码的阅读和维护。请检查:

  • 是否符合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. 提供替代方案,而非批评

不要说“去掉这个临时方案”,而

博客

书籍推荐