php 实现mvc
PHP 实现 MVC 架构
MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 的基本方法:
目录结构
典型的 MVC 目录结构如下:
app/
controllers/
models/
views/
public/
index.php
入口文件 (public/index.php)
负责初始化应用并路由请求:
<?php
require '../app/bootstrap.php';
$router = new Router();
$router->dispatch($_SERVER['REQUEST_URI']);
路由类 (Router.php)
解析 URL 并调用相应控制器:
class Router {
public function dispatch($url) {
$urlParts = explode('/', trim($url, '/'));
$controllerName = ucfirst($urlParts[0] ?? 'home') . 'Controller';
$action = $urlParts[1] ?? 'index';
if (class_exists($controllerName)) {
$controller = new $controllerName();
if (method_exists($controller, $action)) {
$controller->$action();
}
}
}
}
控制器示例 (HomeController.php)
处理业务逻辑并协调模型与视图:
class HomeController {
public function index() {
$model = new HomeModel();
$data = $model->getData();
require '../app/views/home/index.php';
}
}
模型示例 (HomeModel.php)
处理数据逻辑:

class HomeModel {
public function getData() {
return ['title' => 'Welcome', 'content' => 'This is MVC example'];
}
}
视图示例 (views/home/index.php)
显示用户界面:
<!DOCTYPE html>
<html>
<head>
<title><?= $data['title'] ?></title>
</head>
<body>
<h1><?= $data['content'] ?></h1>
</body>
</html>
自动加载
使用 spl_autoload_register 实现类自动加载:
spl_autoload_register(function ($className) {
$file = '../app/' . str_replace('\\', '/', $className) . '.php';
if (file_exists($file)) {
require $file;
}
});
配置管理
创建配置文件 (config.php):
return [
'database' => [
'host' => 'localhost',
'user' => 'root',
'pass' => '',
'name' => 'test'
]
];
数据库连接
封装数据库操作 (Database.php):

class Database {
private $connection;
public function __construct($config) {
$this->connection = new PDO(
"mysql:host={$config['host']};dbname={$config['name']}",
$config['user'],
$config['pass']
);
}
public function query($sql, $params = []) {
$stmt = $this->connection->prepare($sql);
$stmt->execute($params);
return $stmt;
}
}
改进路由
支持参数传递:
public function dispatch($url) {
$urlParts = explode('/', trim($url, '/'));
$controllerName = ucfirst($urlParts[0] ?? 'home') . 'Controller';
$action = $urlParts[1] ?? 'index';
$params = array_slice($urlParts, 2);
if (class_exists($controllerName)) {
$controller = new $controllerName();
if (method_exists($controller, $action)) {
call_user_func_array([$controller, $action], $params);
}
}
}
使用 Composer
集成现代 PHP 开发工具:
- 安装 Composer
- 创建 composer.json 管理依赖
- 使用 PSR-4 自动加载标准
安全考虑
实现基础安全措施:
// 输入过滤
function sanitize($input) {
return htmlspecialchars(strip_tags(trim($input)));
}
// CSRF 防护
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('Invalid CSRF token');
}
}
错误处理
自定义错误处理:
set_error_handler(function($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
});
set_exception_handler(function($exception) {
error_log($exception);
http_response_code(500);
echo 'An error occurred';
});
这个实现提供了 MVC 架构的基础框架,可根据项目需求进行扩展和优化。






