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

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

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

开始课程

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

\n\n

代码审查不仅仅是一种形式,更是团队成长和提高代码质量的强大工具。对于初学PHP的开发者来说,审查过程往往令人望而生畏:“万一我漏掉了bug怎么办?”,“怎么告诉同事他的代码不好?”。在本文中,我们将分析在审查PHP代码时需要注意什么,以及如何提供有用而不伤人的反馈。

\n\n

1. 在PHP代码中检查什么:给初学审查者的检查清单

\n\n

我们从技术方面开始。以下是审查PHP项目代码时应检查的主要类别:

\n\n
    \n
  • 安全性(Security) — 最关键的领域。检查是否存在SQL注入、XSS漏洞、未受保护的输入数据。
  • \n
  • 编码标准符合性 — PSR-1、PSR-12(或您团队的标准)。这关乎可读性和一致性。
  • \n
  • 性能 — 避免不必要的数据库查询、低效的循环、循环内的重操作。
  • \n
  • 架构和逻辑 — 遵守SOLID、DRY、KISS原则。代码是否重复?逻辑是否过于复杂?
  • \n
  • 错误处理 — 是否有try-catch?异常是否正确记录?错误是否被抑制?
  • \n
  • 类型声明和严格性 — 代码是否使用了strict_types?参数和返回值的类型是否正确指定?
  • \n
\n\n

以下是从安全性角度出发的糟糕代码和良好代码示例:

\n\n
<?php\n// 糟糕:存在SQL注入漏洞\n$query = "SELECT * FROM users WHERE id = " . $_GET['id'];\n$result = mysqli_query($conn, $query);\n\n// 良好:使用预处理语句\n$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");\n$stmt->bind_param("i", $id);\n$id = (int)$_GET['id'];\n$stmt->execute();\n$result = $stmt->get_result();\n?>
\n\n

2. 如何提供反馈:建设性审查的原则

\n\n

技术部分只是事情的一半。另一半是能够以让代码作者愿意修改、而不是感到被冒犯或防御的方式传达您的意见。

\n\n

反馈的基本原则:

\n\n
    \n
  • 谈论代码,而不是人。 不要说“你写了糟糕的代码”,而要说“这个地方存在潜在漏洞,我们一起讨论如何修复它”。
  • \n
  • 使用“我”字句。 “我看到这里可能会出错,因为……”——这比“你错了”听起来更柔和。
  • \n
  • 解释“为什么”。 不要只说“使用预处理语句”,而要说“预处理语句可以防止SQL注入,因为它们将数据与查询代码分离”。
  • \n
  • 提供替代方案。 不要说“这不好”,而要展示如何做得更好。
  • \n
  • 表扬好的部分。 不要忘记指出好的解决方案:“把验证逻辑提取到单独的类中,这个主意太棒了!”
  • \n
\n\n

建设性评论的示例:

\n\n
<!-- 糟糕的评论 -->\n<!-- 你为什么不用严格类型?这是基础啊! -->\n\n<!-- 良好的评论 -->\n<!-- 建议在文件开头添加 declare(strict_types=1)。\n这将强制PHP严格检查类型,防止可能导致bug的\n意外隐式类型转换。 -->
\n\n

3. 审查时应注意的典型PHP代码错误

\n\n

以下是初级PHP开发者代码中常见的典型问题列表。请特别关注这些:

\n\n
    \n
  • 缺少输入数据验证。 永远不要信任$_GET、$_POST、$_REQUEST、$_FILES。
  • \n
  • 函数内部的全局变量和超全局数组。 这破坏了封装性,并

博客

书籍推荐