用PHP编写整洁代码:尊重自己与同事的指南

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

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

开始课程

引言:为什么“整洁代码”关乎金钱与精力,而非吹毛求疵

\n\n

想象一下,你打开一个一年前用PHP编写的旧项目。你打开文件 index.php,映入眼帘的是——HTML、SQL查询、echo语句以及名为 f1() 的函数的大杂烩。熟悉吗?如果是,那么你要么是刚刚起步的新手,要么是接手了“遗留”项目的经验丰富的开发者。

\n\n

PHP整洁代码并非追逐时尚,也不是团队负责人的一时兴起。它是节省时间、精力和金钱的工具。在本文中,我们将探讨如何将你的PHP代码从“草稿”转变为令你和同事都满意的“定稿”。我们将讨论PSR标准、SOLID原则、正确的命名规范,并提供真实示例。开始吧!

\n\n

1. 整洁代码的哲学:核心原则

\n\n

在深入语法之前,让我们先约定游戏规则。整洁代码是指:

\n\n
    \n
  • 无需注释即可理解(尽管有时注释是必要的)。
  • \n
  • 易于测试。
  • \n
  • 不惧怕重构。
  • \n
  • 在整个项目中遵循统一的风格。
  • \n
\n\n

罗伯特·C·马丁(Bob大叔)在其著作《整洁代码》中说过:“快速编码的唯一方法就是写好代码”。如果你写得又快又乱,一个月后你将花费十倍的时间进行调试。让我们从别人的错误中学习,而不是重蹈覆辙。

\n\n

2. PSR标准:迈向秩序的第一步

\n\n

在PHP世界中,有PSR(PHP标准建议)——社区采纳的推荐规范。如果你不使用它们,你至少是在给阅读你代码的自己和同事增加难度。

\n\n

2.1 PSR-1 和 PSR-12:基础编码风格

\n\n

PSR-1 规定了通用规则,而 PSR-12 是扩展风格。以下是几个关键点:

\n\n
    \n
  • 文件应仅使用 <?php 或 <?=。
  • \n
  • 文件编码为 UTF-8 无 BOM。
  • \n
  • 类名应使用 StudlyCaps(例如 UserController)。
  • \n
  • 方法和属性名应使用 camelCase(例如 getUserName())。
  • \n
  • 缩进使用4个空格(而非制表符!)。
  • \n
\n\n

糟糕代码示例:

\n
<?\nclass user_controller {\n\tfunction Get_User_Name($id) {\n\t\t$name = Db::query("SELECT name FROM users WHERE id=$id");\n\t\treturn $name;\n\t}\n}\n
\n\n

良好代码示例(符合 PSR-12):

\n
<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Controllers;\n\nuse App\\Models\\User;\n\nclass UserController\n{\n    public function getUserName(int $id): ?string\n    {\n        $user = User::find($id);\n        return $user ? $user->getName() : null;\n    }\n}\n
\n\n

看到区别了吗?第二个版本读起来像一本书:方法的功能、接受和返回的数据类型一目了然。

\n\n

2.2 PSR-4:类的自动加载

\n\n

忘记在每个文件中使用 require_once。使用 Composer 和 PSR-4。这允许根据命名空间自动加载类。文件夹结构应与命名空间对应:

\n\n
src/\n  App/\n    Controllers/\n      UserController.php\n    Models/\n      User.php\n    Services/\n      PaymentService.php\n
\n\n

在 composer.json 中,只需一行即可配置:

\n
{\n    "autoload": {\n        "psr-4": {\n            "App\\\\": "src/"\n        }\n    }\n}\n
\n\n

3. 正确的命名规范:如何避免将变量命名为 $a

\n\n

命名占成功的一半。糟糕的变量名甚至可能迷惑天才。让我们分析常见的错误。

\n\n

3.1 避免缩写(除非显而易见)

博客

书籍推荐