引言:为什么需要在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. 提供替代方案,而非批评
不要说“去掉这个临时方案”,而