PHP实现简单MVC
在PHP中使用MVC模式
在PHP开发中,MVC(Model-View-Controller)模式越来越流行,尤其是在开源框架中。MVC模式适用于大多数场景,但在某些情况下可能显得过于复杂,例如:
- 简单个人博客:对于只有几百篇文章的小型博客,MVC可能显得过于笨重。
- 大型门户网站:如新浪等门户网站,使用MVC可能导致大量文件加载,影响性能。
接下来,我们将介绍MVC的基本原理,并提供一个简单的实现示例。以下内容适用于PHP开发。
MVC简介
1. MVC在软件工程中的角色
MVC是一种软件架构模式,在PHP中通常包含以下三层:
-
Model(模型):
- 负责应用功能的实现和逻辑处理。
- 在PHP中,负责数据管理和生成。
-
View(视图):
- 负责图形界面逻辑。
- 在PHP中,负责输出和处理模板、资源文件的调用。
-
Controller(控制器):
- 负责请求转发和处理。
- 在PHP中,根据请求决定调用的视图和使用的数据。
为什么使用MVC?
- 代码分层与分类:MVC将代码按功能分层,提高代码的可维护性。
- 分离开发与设计:使开发工作与设计工作相对独立。
- 其他优点:
- 网站目录结构更清晰。
- 易于维护和扩展。
- 实现模块的复用。
MVC实现
1. 请求URL
约定请求页面的URL结构如下:
abc.com/index.php?c=demo&a=index¶m=welcome
c
:控制器名称。a
:方法名称。param
:参数。
注:URL优化与本文关系不大,后续可进一步探讨。
2. MVC目录结构
规划MVC的目录结构如下:
├─www # 网站根目录
│ ├─controller # 控制器目录
│ │ ├─democontroller.php # demo控制器
│ ├─model # 模型目录
│ │ ├─model.php # model模型
│ ├─view # 视图目录
│ │ ├─index.php # index视图
│ ├─index.php # 入口文件
3. 控制器(Controller)
在controller/democontroller.php
文件中添加以下代码:
// controller/democontroller.php
class DemoController {
public function index() {
echo 'hello world';
}
}
在入口文件index.php中添加以下代码:
// index.php
require('controller/democontroller.php');
$controller = new DemoController();
$controller->index();
访问约定的URL,将看到输出hello world。
4. 改进入口文件
利用URL参数动态调用控制器和方法:
// index.php
$c_str = $_GET['c'];
$c_name = $c_str . 'controller';
$c_path = 'controller/' . $c_name . '.php';
$method = $_GET['a'];
require($c_path);
$controller = new $c_name;
$controller->$method();
通过改变URL参数c
和a
的值,可以调用不同的控制器和方法。
5. 视图(View)
在view/index.php
文件中定义视图类:
// view/index.php
class Index {
public function display($output) {
echo $output;
}
}
修改控制器文件,使用视图对象输出数据:
// controller/democontroller.php
class DemoController {
private $data = 'Hello berfen!';
public function index() {
require('view/index.php');
$view = new Index();
$view->display($this->data);
}
}
访问URL,将看到输出:
Hello berfen!
6. 模型(Model)
将数据处理逻辑交给模型,修改模型文件:
// model/model.php
class Model {
private $data = [
'title' => 'Hello furzoom',
'welcome' => 'Welcome to www.berfen.com',
];
public function getData($key) {
return $this->data[$key];
}
}
修改入口文件,传递参数给控制器方法:
// index.php
$param = $_GET['param'];
$controller->$method($param);
修改控制器,使用模型获取数据:
// controller/democontroller.php
class DemoController {
public function index($param) {
require('view/index.php');
require('model/model.php');
$model = new Model();
$view = new Index();
$data = $model->getData($param);
$view->display($data);
}
}
访问URL,例如abc.com/index.php?c=demo&a=index¶m=welcome
,将看到输出:
Welcome to www.berfen.com
总结
至此,PHP的MVC模式已经基本介绍完成。通过分离控制器、模型和视图,我们实现了代码的分层和模块化,提高了代码的可维护性和扩展性。
后续扩展:
- 优化URL结构。
- 增加更多的控制器、模型和视图。
- 实现更复杂的业务逻辑。
希望本文能帮助您理解并实现PHP中的简单MVC模式!