PHP架构模式:从混乱到整洁代码

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

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

开始课程

别再写“意大利面条式代码”:为什么PHP架构模式是必备技能

\n\n

你是否曾经打开一个老旧的PHP项目,感到脊背发凉?当index.php文件中混杂着SQL查询、HTML布局、业务逻辑和对远古神灵的祈祷时?如果是这样——你遇到了架构缺失的问题。或者更糟的是,架构混乱。

\n\n

今天我们将讨论PHP架构模式如何将你的代码从一堆砖块变成一座结构严谨的建筑。这不是只有十年经验的高级开发者才需要掌握的理论。这是能拯救你的睡眠和项目预算的工具。我们将深入分析4个关键模式:MVC、Active Record、Repository和依赖注入。开始吧!

\n\n

MVC(模型-视图-控制器):所有框架的基石

\n\n

如果你使用过Laravel、Symfony或Yii2——你已经见过MVC。这不仅仅是一个缩写,而是一种将代码划分为三个职责区域的方法:

\n\n
    \n
  • 模型(Model) — 数据和业务逻辑(数据库操作、验证)。
  • \n
  • 视图(View) — 显示(HTML、模板)。
  • \n
  • 控制器(Controller) — 请求处理(连接纽带)。
  • \n
\n\n

以下是在纯PHP(无框架)中的实现方式:

\n\n
<?php\n// UserController.php\nclass UserController {\n    public function show(int $id): void {\n        $userModel = new UserModel();\n        $user = $userModel->findById($id); // 模型\n        \n        // 视图\n        include 'views/user_profile.php';\n    }\n}\n\n// UserModel.php\nclass UserModel {\n    public function findById(int $id): ?array {\n        $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");\n        $stmt->execute([$id]);\n        return $stmt->fetch() ?: null;\n    }\n}\n\n// views/user_profile.php\n<h1><?= htmlspecialchars($user['name']) ?></h1>
\n\n

适用场景: 当你有超过2个页面时始终使用。MVC是基础。它实现了逻辑分离,简化了测试和维护。

\n\n

小技巧: 不要在视图中直接编写SQL。这会破坏模式的本质。使用预编译模板(Twig、Blade)——它们会自动转义输出,防止XSS攻击。

\n\n

Active Record:以性能为代价的简单性

\n\n

Active Record — 对象同时代表数据库中的一行,并包含操作该行的方法。经典案例是Laravel中的Eloquent或Yii2中的ActiveRecord。

\n\n

纯PHP示例:

\n\n
<?php\nclass User extends ActiveRecord {\n    protected string $table = 'users';\n    \n    public static function findByName(string $name): ?self {\n        return self::query()\n            ->where('name', $name)\n            ->first();\n    }\n}\n\n// 使用\n$user = new User();\n$user->name = '伊万';\n$user->email = 'ivan@example.com';\n$user->save(); // 插入数据库\n\n$admin = User::findByName('管理员');\n$admin->role = 'superadmin';\n$admin->update();
\n\n

优点:

\n
    \n
  • CRUD操作代码量最少。
  • \n
  • 对新手直观易懂。
  • \n
\n\n

缺点:

\n
    \n
  • 违反单一职责原则(一个对象做所有事情)。
  • \n
  • 难以测试——对象与数据库紧密耦合。
  • \n
  • 对于复杂逻辑扩展性差。
  • \n
\n\n

结论:Active Record 是原型、小型项目和管理后台的绝佳选择。但对于企业级应用,建议使用Repository模式。

\n\n

Repository:数据存储的抽象层

\n\n

Repository — 是业务逻辑与数据源(数据库、API、文件)之间的中间层。你只需说:“给我用户p

博客

书籍推荐