批改状态:未批改
老师批语:
1、MVC单例模式:
class Config{
private static $instance = null;
// 配置参数容器
public $setting = [];
// 设置一个只能通过静态的实例化对象
public static function getIN(){
// 判断当前类是否被实例化
if(self::$instance == null){
// 如果没有被实例化,就实例化
self::$instance = new self();
}
// 如果存在就返回当前类的实例化
return self::$instance;
}
// 设置配置操作
public function set(){
// 获取参数的数量
$num = func_num_args();
if($num > 0){
switch ($num){
case 1:// 如果为1 那就存在一个数组,
$value = func_get_arg(0); // 索引为0
if(is_array($value)){
// 数组合并,有相同的键会进行覆盖
$this->setting = array_merge($this->setting,$value);
}
break;
case 2:
$name = func_get_arg(0);// 键点索引为0
$value = func_get_arg(1);// 键值索引为1
$this->setting[$name] = $value;
break;
default:
echo '<span style="color:red">非法参数</span>';
}
}else{
echo '<span style="color:red">没有参数</span>';
}
}
// 获取参数: 当无参数的时候,默认获取全部参数(必须设置默认的参数,不然会报错)
public function get($name =''){
// 判断参数是否为空
if (empty($name)){
// 如果为空就返回setting[] 中的所有的参数
return $this->setting;
}
// 如果有就返回当前的值
return $this->setting[$name];
}
}
//实例化静态方法
$obj = Config::getIN();
// 设置键和键值
$obj->set('host','127.0.0.1');
// 查看set方法中传入的host键值
echo $obj->get('host');
echo '<hr>';
// 设置多个参数,以数组的方式
$con = ['host'=>'localhost','user'=>'root','pass'=>'123456'];
$obj->set($con);
// get()方法中的 $name 必须设置默认的参数,不然会报错
print_r($obj->get());点击 "运行实例" 按钮查看在线实例
2、MVC的实现原理:
(1)新建一个model文件夹,存放模型文件(Model.php):
<?php
namespace mvc\model;
class Model{
// 创建一个数据库连接成员
public $pdo;
// 创建一个数据库的结果集
public $result = [];
// 构造方法:连接数据库
public function __construct($dbname,$user,$pass){
$this->pdo = new \PDO('mysql:host=127.0.0.1;dbname='.$dbname,$user,$pass);
}
// 查询语句
public function select($table,$num){
// 创建预处理对象
$stmt = $this->pdo->prepare("SELECT `id`,`name`,`email` FROM {$table} LIMIT :num ");
// 执行查询
$stmt->bindValue(':num',$num,\PDO::PARAM_INT);
$stmt->execute();
$this->result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
}点击 "运行实例" 按钮查看在线实例
(2)新建一个view文件夹,存放模板文件(View.php):
<?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 lang="en">
<head>
<meta charset="UTF-8">
<title>MVC简介</title>
</head>
<body>
<table>
<caption>信息表</caption>
<tr>
<th>ID</th>
<th>姓名</th>
<th>邮箱</th>
</tr>';
foreach($data as $staff){
$table .= '<br>';
$table .= '<td>'.$staff['id'].'</td>';
$table .= '<td>'.$staff['name'].'</td>';
$table .= '<td>'.$staff['email'].'</td>';
$table .= '</br>';
}
$table .= '</table></body></html>';
echo $table;
}
}点击 "运行实例" 按钮查看在线实例
(3)新建一个view文件夹controller,存放系统(把模型和模板文件进行整合)文件(controller.php):
<?php
namespace mvc\controller;
// 导入模型和模板的类
use mvc\model\Model;
use mvc\view\View;
class controller{
public function index(){
require './model/Model.php';
// 实例化对象
$model = new Model('php','root','root');
// 调用 Model类中的 select方法(表名,查询的数据个数)
$model->select('lianxi',1);
// 用临时变量存储结果集
$result = $model->result;
// 导入模板文件
require './view/view.php';
// 实例化($result参数是从数据库拿到的结果集)
$view = new View($result);
// 调用 View 类中的 getData 方法,来获取数据
$data = $view->getData();
// 调用 View 类中的 display 方法,渲染并生生html代码
// 传入的参数的getData()方法中的数据
$view->display($data);
}
}点击 "运行实例" 按钮查看在线实例
(4)创建一个框架入口文件也就是首页调用的文件(index.php):
<?php require './controller/Controller.php'; use mvc\controller\Controller; $controller = new Controller; $controller->index();
点击 "运行实例" 按钮查看在线实例
最后打开框架入口文件(index.php),如果数据库的数据返回到浏览器上,并渲染出来那就是完成了,MVC封装
MVC的设计思想是什么?
我觉的因为有mvc封装,代码写的会更少点,可以完成更多代码复用性,可以了解到框架的封装知识。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号