批改状态:合格
老师批语:mvc, 其实也没有想像中的难, 你也可以写一个
1. 写一个依赖注入的案例, 内容自定义

DEMO2
<?php
/**
* MVC 思想
* 任务:将商品信息展示出来 *
*/
//1. 依赖注入的案例
// 加载:模型类
require 'Model.php';
// 加载:视图
require 'View.php';
// 控制器
class Controller
{
public function index(Model $model, View $view)
{
// 1. 获取数据
$data = $model->getData();
// 2. 渲染模版/视图
return $view->fetch($data);
}
}
// 客户端调用控制器
// 3.将模型与视图的实例化过程 放在控制器的外部实现
$model = new Model();
$view = new View();
$controller = new Controller();
// 将Model 和View的类实现,作为参数,注入到控制器的方法中 这就是依赖注入方法
// 注入点是:index 普通方法
// 1.控制器中的普通方法
// 2.控制器中的构造方法 (优点:简化代码 ,多对象使用)
echo $controller->index($model, $view);
?>点击 "运行实例" 按钮查看在线实例
Model 模型类:操作数据库
<?php
// 模型类:操作数据库
class Model
{
public function getData()
{
return [
['id'=>1, 'name'=>'苹果电脑', 'model'=>'MacBook Pro', 'price'=>25800],
['id'=>2, 'name'=>'华为手机', 'model'=>'P30 Pro', 'price'=>4980],
['id'=>3, 'name'=>'小爱同学', 'model'=>'AI智能音响', 'price'=>299],
];
}
}
?>点击 "运行实例" 按钮查看在线实例
view 视图类:渲染数据
<?php
// 视图类:渲染数据
class View
{
public function fetch($data)
{
$table = '<table border="1" cellspacing="0" width="400">';
$table .= '<caption>商品信息表</caption>';
$table .= '<tr bgcolor="#add8e6"><th>ID</th><th>品名</th><th>型号</th><th>价格</th></tr>';
foreach ($data as $product){
$table .= '<tr>';
$table .= '<td>' . $product['id'] . '</td>';
$table .= '<td>' . $product['name'] . '</td>';
$table .= '<td>' . $product['model'] . '</td>';
$table .= '<td>' . $product['price'] . '</td>';
$table .= '</tr>';
}
$table .= '</table>';
return $table;
}
}
?>点击 "运行实例" 按钮查看在线实例
2. 写一个mvc应用的案例, 内容自定义

<?php
/**
* MVC 思想
* 任务:将商品信息展示出来 *
*/
// 加载:模型类
require 'Model.php';
// 加载:视图
require 'View.php';
// 控制器
class Controller
{
public function index()
{
// 1. 获取数据
$model = new Model();
$data = $model->getData();
// 2. 渲染模版/视图
$view = new View();
return $view->fetch($data);
}
}
// 客户端调用控制器
$controller = new Controller();
echo $controller->index();
?>点击 "运行实例" 按钮查看在线实例
3. 写一个简单的路由, 理解路由的原理与目标

<?php
// 路由的原理
// 字符串解析为数组使用explode() 第一个为/ 分隔符,第二个处理的数组
// 1.从url路径中解析出独立的单元
$url = $_SERVER['REQUEST_URI'];
echo $url;
$req = explode('/' , $url);
echo '<pre>'. print_r($req,true);
//admin: 后台模块
//User: 控制器
//add:控制器中的方法
$route = array_slice($req, 4, 3);
echo '<pre>'. print_r($route,true);
list($module, $controller, $action) = $route;
echo '模块:'.$module.'<br>控制器:'.$controller.'<br>操作:' .$action;
//http://php.io/1011/mvc/route.php/admin/user/add/name/maomao/age/36/salary/3300
// /name/maomao/age/36/salary/3300
// array_slice()从数组中取出一些数据
$values = array_slice($req,7,6);
echo '<pre>'. print_r($route,true);
for ($i=0; $i<count($values); $i+=2){
$params[$values[$i]] = $values[$i+1];
}
echo '<pre>'. print_r($params,true);
// 控制器
class User
{
public function add($name, $age, $salary)
{
return __METHOD__. ': 姓名: '.$name.', 年龄:'.$age.'岁'. ', 工资:'. $salary .'元';
}
}
// 路由的目标,确定将URL中的操作映射到控制器中的方法上
echo call_user_func_array([(new User()), 'add'], $params);
?>点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号