当前位置:首页 > PHP

php mvc实现

2026-01-14 13:17:33PHP

PHP MVC 实现步骤

模型(Model)层

模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。

class Model {
    protected $db;

    public function __construct() {
        $this->db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
    }
}

class UserModel extends Model {
    public function getUsers() {
        $stmt = $this->db->query("SELECT * FROM users");
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

视图(View)层

视图负责展示数据,通常是HTML模板文件。通过简单的变量替换实现数据渲染。

class View {
    public function render($template, $data = []) {
        extract($data);
        include "views/$template.php";
    }
}

// 使用示例
$view = new View();
$view->render('user_list', ['users' => $users]);

控制器(Controller)层

控制器处理用户请求,协调模型和视图。创建基础控制器类,其他控制器继承它。

php mvc实现

class Controller {
    protected $model;
    protected $view;

    public function __construct() {
        $this->view = new View();
    }
}

class UserController extends Controller {
    public function __construct() {
        parent::__construct();
        $this->model = new UserModel();
    }

    public function index() {
        $users = $this->model->getUsers();
        $this->view->render('user_list', ['users' => $users]);
    }
}

路由处理

创建路由机制将URL映射到对应的控制器和方法。

class Router {
    public function route() {
        $uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
        $segments = explode('/', trim($uri, '/'));

        $controllerName = !empty($segments[0]) ? ucfirst($segments[0]) . 'Controller' : 'HomeController';
        $action = !empty($segments[1]) ? $segments[1] : 'index';

        if (class_exists($controllerName)) {
            $controller = new $controllerName();
            if (method_exists($controller, $action)) {
                $controller->$action();
            } else {
                http_response_code(404);
                echo "Action not found";
            }
        } else {
            http_response_code(404);
            echo "Controller not found";
        }
    }
}

$router = new Router();
$router->route();

目录结构

典型的MVC目录结构如下:

php mvc实现

app/
    controllers/
        UserController.php
    models/
        UserModel.php
    views/
        user_list.php
public/
    index.php

入口文件

public/index.php 是应用的单一入口点:

require_once '../app/bootstrap.php';
$router = new Router();
$router->route();

自动加载

使用Composer的自动加载功能或实现简单的自动加载:

spl_autoload_register(function ($class) {
    $file = '../app/' . str_replace('\\', '/', $class) . '.php';
    if (file_exists($file)) {
        require $file;
    }
});

标签: phpmvc
分享给朋友:

相关文章

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…