博客列表 >PHP之初识MVC

PHP之初识MVC

小威的博客
小威的博客原创
2018年06月06日 08:13:56774浏览

先看一个完整的MVC案例:

实例

<?php 
//连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=php','root','root');

//创建预处理语句
$stmt = $pdo->prepare("SELECT staff_id,name,age,salary FROM staff LIMIT :num;");

//执行查询
$stmt -> bindValue(':num',10,PDO::PARAM_INT);
$stmt -> execute();

//解析结果集
$result = $stmt -> fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>MVC模式简介</title>
	<style type="text/css">
		table,th,td {
			border:1px solid black;
		}

		table {
			border-collapse: collapse;
			width: 60%;
			margin: 30px auto;
			text-align: center;
		}
		table tr:first-child {
			background-color: lightgreen;
		}
		table caption {
			font-size:1.5em;
			margin-bottom: 15px;
		}
	</style>
</head>
<body>
	<table>
		<caption>员工信息表</caption>
		<tr>
			<th>ID</th>
			<th>姓名</th>
			<th>年龄</th>
			<th>工资</th>
		</tr>
		<?php foreach ($result as $staff) : ?>
		<tr>
			<td><?php echo $staff['staff_id'] ?></td>
			<td><?php echo $staff['name'] ?></td>
			<td><?php echo $staff['age'] ?></td>
			<td><?php echo $staff['salary'] ?></td>
		</tr>
		<?php endforeach; ?>

	</table>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


下面我们把以上案例进行拆分出 M V C三部分


  • M:Model模型层,用来实现也数据库相关的操作

<?php 
namespace mvc\model;
class Model 
{
public $pdo = null;
public $result = [];
//构造方法
public function __construct($dbname, $user, $pass)
{
//连接数据库
$this->pdo = new \PDO('mysql:host=localhost;dbname='.$dbname,$user,$pass);
}
//执行查询并获取结果集
public function select($table, $num)
{
//创建预处理语句:将复制过来的 $pdo 替换成 $this->pdo
$stmt = $this->pdo->prepare("SELECT staff_id,name,age,salary FROM {$table} LIMIT :num;");
//执行查询
$stmt -> bindValue(':num',$num,\PDO::PARAM_INT);
$stmt -> execute();
//解析结果集:将复制过来的 $result 替换成成 $this->result
$this->result = $stmt -> fetchAll(\PDO::FETCH_ASSOC);
}
}


  • V:View视图层,用来实现用户界面与数据展示

<?php 
namespace mvc\view;
class View
{
public $data = [];
public function __construct($data)
{
$this->data = $data;
}
public function getData()
{
return $this->data;
}
public function display($data)
{
$table = '
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC模式简介</title>
<style type="text/css">
table,th,td {
border:1px solid black;
}
table {
border-collapse: collapse;
width: 60%;
margin: 30px auto;
text-align: center;
}
table tr:first-child {
background-color: lightgreen;
}
table caption {
font-size:1.5em;
margin-bottom: 15px;
}
</style>
</head>
<body>
<table>
<caption>员工信息表</caption>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>工资</th>
</tr>';
foreach ($data as $staff) {
$table .= '<tr>';
$table .=  '<td>'.$staff['staff_id'].'</td>';
$table .=  '<td>'.$staff['name'].'</td>';
$table .=  '<td>'.$staff['age'].'</td>';
$table .=  '<td>'.$staff['salary'].'</td>';
}
$table .= '</table>
</body>
</html>';
   echo $table;
}
}


  • C:Controller 控制器层,根据视图层的要求选择合适的模型

<?php 
namespace  mvc\controller;
class Controller 
{
public function index()
{
require './model/Model.php';
$model = new \mvc\model\Model('php','root','root');
$model -> select('staff',10);
$result = $model -> result;
require './view/View.php';
$view = new \mvc\view\View($result);
$data = $view->getData();
$view->display($data);
}
}


下面是模型和控制器测试文件  test.php

<?php 
require './model/Model.php';
use mvc\model\Model;
$model = new Model('php','root','root');
$model -> select('staff',10);
$result = $model -> result;
// print_r($result);
require './view/View.php';
use mvc\view\View;
$view = new View($result);
$data = $view->getData();
$view->display($data);
//这些操作应该放在控制器


最后是测试文件 index.php

<?php 
//导入控制器类
require 'controller/Controller.php';
use mvc\controller\Controller;
$controller = new Controller;
$controller->index();


MVC的知识点:

MVC是最经典,也是最流行的Web项目设计思想

M:Model模型层,用来实现也数据库相关的操作

V:View视图层,用来实现用户界面与数据展示

C:Controller 控制器层,根据视图层的要求选择合适的模型


第一步. 创建temp.php文件

1. 完成模板创建

2. 数据库连接与查询(pdo实现)


第二步. MVC目录架构

1. 创建model 模型层目录

.创建Model类

.创建构造器完成数据库连接

.select()方法完成结果集查询

2. 创建test.php测试脚本

.完成模型类的测试,确保能正常工作

3. 创建view 视图层目录

.创建View类

.类中声明三个方法

.构造器方法:实现模板赋值

.getData方法: 格式化数据

.display(): 渲染模板

4. 再次打开test.php测试脚本

.对刚才创建的视图类进行测试

5. 创建controller 控制器目录

.仅创建一个index方法

.将test.php内容复制进去即可

6. 创建项目入口文件

.入口文件一般是:index.php

.在mvc目录下创建index.php

.入口文件只做一件事:实例化控制器并调用index方法

7. 最终将项目跑起来,实现与temp.php一样的效果,但结构更合理

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议