当前位置:首页 > PHP

php实现mvc

2026-01-14 13:13:28PHP

PHP 实现 MVC 架构

MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。以下是 PHP 实现 MVC 架构的具体方法。

目录结构

一个典型的 MVC 目录结构如下:

app/
    controllers/
    models/
    views/
public/
    index.php

入口文件

public/index.php 是应用程序的入口文件,负责初始化路由和加载核心组件:

<?php
require_once '../app/bootstrap.php';

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

路由类

Router 类负责解析 URL 并调用相应的控制器和方法:

class Router {
    protected $controller = 'Home';
    protected $method = 'index';
    protected $params = [];

    public function __construct() {
        $url = $this->parseUrl();

        if (file_exists('../app/controllers/' . ucfirst($url[0]) . 'Controller.php')) {
            $this->controller = ucfirst($url[0]);
            unset($url[0]);
        }

        require_once '../app/controllers/' . $this->controller . 'Controller.php';
        $this->controller = new $this->controller;

        if (isset($url[1])) {
            if (method_exists($this->controller, $url[1])) {
                $this->method = $url[1];
                unset($url[1]);
            }
        }

        $this->params = $url ? array_values($url) : [];
        call_user_func_array([$this->controller, $this->method], $this->params);
    }

    public function parseUrl() {
        if (isset($_GET['url'])) {
            return explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
        }
    }
}

控制器

控制器负责处理用户请求并协调模型和视图。例如 HomeController.php

php实现mvc

class HomeController {
    public function index($name = '') {
        $model = new HomeModel();
        $user = $model->getUser($name);
        $view = new View('home/index', ['user' => $user]);
    }
}

模型

模型负责数据处理和业务逻辑。例如 HomeModel.php

class HomeModel {
    public function getUser($name) {
        return ['name' => $name ?: 'Guest'];
    }
}

视图

视图负责展示数据。View 类可以这样实现:

class View {
    public function __construct($view, $data = []) {
        require_once '../app/views/' . $view . '.php';
    }
}

视图文件 views/home/index.php

php实现mvc

<!DOCTYPE html>
<html>
<head>
    <title>Home</title>
</head>
<body>
    <h1>Welcome, <?php echo $user['name']; ?>!</h1>
</body>
</html>

数据库连接

可以在核心文件中添加数据库连接,例如 bootstrap.php

require_once 'config/database.php';

class Database {
    private $host = DB_HOST;
    private $user = DB_USER;
    private $pass = DB_PASS;
    private $dbname = DB_NAME;

    public function connect() {
        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
        $pdo = new PDO($dsn, $this->user, $this->pass);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        return $pdo;
    }
}

配置示例

config/database.php 可能包含:

define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'password');
define('DB_NAME', 'mvc_app');

自动加载

使用 spl_autoload_register 自动加载类文件:

spl_autoload_register(function($className) {
    $paths = [
        '../app/controllers/',
        '../app/models/',
        '../app/core/'
    ];

    foreach ($paths as $path) {
        $file = $path . $className . '.php';
        if (file_exists($file)) {
            require_once $file;
        }
    }
});

错误处理

添加错误处理以提高调试效率:

error_reporting(E_ALL);
ini_set('display_errors', 1);

通过以上步骤,可以实现一个基本的 PHP MVC 架构。根据项目需求,可以进一步扩展功能,如添加中间件、依赖注入容器或 ORM 等高级特性。

标签: phpmvc
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

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

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php实现跳转

php实现跳转

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

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节点。每个…

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…