当前位置:首页 > 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
分享给朋友:

相关文章

vue实现mvc

vue实现mvc

Vue 实现 MVC 模式的方法 Vue 本身是一个 MVVM(Model-View-ViewModel)框架,但可以通过合理的架构设计模拟 MVC(Model-View-Controller)模式。…

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (in…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n!…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…