php mvc 实现
PHP MVC 实现步骤
模型(Model)
模型负责处理数据和业务逻辑。创建一个类封装数据库操作,例如查询、插入、更新和删除。使用 PDO 或 MySQLi 扩展与数据库交互。模型不直接处理用户请求或显示数据。
class UserModel {
private $db;
public function __construct($db) {
$this->db = $db;
}
public function getUsers() {
$stmt = $this->db->query("SELECT * FROM users");
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
视图(View)
视图负责展示数据,通常是 HTML 模板。视图从控制器接收数据并渲染页面。避免在视图中包含业务逻辑。

// views/user_list.php
foreach ($users as $user) {
echo "<p>{$user['name']}</p>";
}
控制器(Controller)
控制器处理用户请求,协调模型和视图。从模型中获取数据,传递给视图渲染。一个基础控制器可能包含路由逻辑。

class UserController {
private $model;
public function __construct($model) {
$this->model = $model;
}
public function listUsers() {
$users = $this->model->getUsers();
include 'views/user_list.php';
}
}
路由处理
使用单一入口文件(如 index.php)解析 URL,调用对应的控制器和方法。可以通过 $_GET 参数或正则表达式匹配路由。
$action = $_GET['action'] ?? 'default';
$controller = new UserController($model);
if ($action === 'list') {
$controller->listUsers();
}
依赖管理
使用依赖注入或容器管理模型、控制器和服务的实例化。避免在控制器中直接实例化模型,提高可测试性。
$db = new PDO("mysql:host=localhost;dbname=test", "user", "pass");
$model = new UserModel($db);
$controller = new UserController($model);
目录结构示例
app/
├── models/
│ └── UserModel.php
├── views/
│ └── user_list.php
├── controllers/
│ └── UserController.php
public/
└── index.php






