当前位置:首页 > 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实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php 实现队列

php 实现队列

PHP 实现队列的方法 PHP 可以通过多种方式实现队列功能,以下是几种常见的实现方法: 使用数组实现队列 PHP 数组可以通过 array_push 和 array_shift 函数模拟队列的先进…

php无法实现的

php无法实现的

PHP 的局限性 PHP 是一种广泛使用的服务器端脚本语言,主要用于 Web 开发。尽管功能强大,但在某些场景下存在局限性。 操作系统级开发 PHP 不适合编写操作系统内核或底层驱动程序。这类任务通…

php实现回复功能

php实现回复功能

实现回复功能的基本步骤 在PHP中实现回复功能通常涉及数据库操作、表单处理和前后端交互。以下是实现回复功能的关键步骤: 数据库设计 创建包含回复数据的表结构,例如: CREATE TABLE re…

php实现下载功能

php实现下载功能

PHP实现文件下载功能 使用PHP实现文件下载功能可以通过设置HTTP头信息控制浏览器行为,以下是几种常见实现方式: 基础下载方法 $file_path = '/path/to/file.pdf';…

php实现无限级分类

php实现无限级分类

无限级分类的实现方法 无限级分类通常用于构建树形结构数据,如商品分类、地区选择等。以下是几种常见的实现方式: 递归实现法 递归是最直观的实现方式,通过函数自身调用来处理子分类: function…