批改状态:合格
老师批语:其实这些都是一些最简单的业务思想, 一定要领会
C :Controller,控制器
View->Controller->Model 前端视图->处理操作->后端操作
示例:
<?phpnamespace MVC_test;use PDO;class Model{public function myDate(){return ($pdo = new PDO('mysql:host=localhost;dbname=mysqli','root','142536'))->query('select * from user limit 10')->fetchAll(PDO::FETCH_ASSOC);}}
示例图:
Model.php 功能主要是一个连接数据库类
View.php 前端视图
<?phpnamespace MVC_test;class View{public function mysHow($data){$table = '<table>';$table.='<tr></tr>';$table .= '<caption>用户信息表</caption>';$table .= '<tr><th>用户名</th><th>性别</th><th>年龄</th><th>邮箱</th><th>手机</th></tr>';foreach($data as $user){$table .= '<tr>';$table .= '<td>'.$user['username'].'</td>';$table .= '<td>'.$user['sex'].'</td>';$table .= '<td>'.$user['age'].'</td>';$table .= '<td>'.$user['email'].'</td>';$table .= '<td>'.$user['mobile'].'</td>';}$table.='<tr></table>';return $table;}}echo '<style>table {border-collapse: collapse; border: 1px solid;text-align: center; width: 500px;height: 150px;width: 600px;}caption {font-size: 1.2rem; margin-bottom: 10px;}tr:first-of-type { background-color:yellow;}td,th {border: 1px solid; padding:5px}</style>';
示例图:
示例:
<?phpnamespace MVC_test;require 'Model.php';require 'View.php';class Controller{public function Index(){$data = (new Model)->myDate();//引入Model.php的myDate方法(链接数据库)return (new View)->mysHow($data);//返回引入View.php的mysHow方法(展示html)}}
示例
<?phpnamespace MVC_test;require 'Model.php';require 'View.php';class Controller_1{private $data = NULL;private $show = NULL;public function __construct($data,$show){$this->data = $data;$this->show = $show;}public function Index(){$this->data = (new Model)->myDate();return $this->show = (new View)->mysHow($this->data);}}
示例:
<?phpnamespace MVC_test;use Closure;//加载模型类require 'Model.php';//加载视图类require 'View.php';//服务容器class Container{// 1. 服务容器protected $instances = [];//定义一个空数组来存储对象public function bInd($alias, Closure $process)// 2. 向对象容器中添加对象// 参数1: 是外部对象在当前对象容器数组中的键名/别名// 参数2: 是当前需要绑定到容器的对象的实例化过程(函数){$this->instances[$alias] = $process;//将实例化过程写入服务容器}public function make($alias,$params=[])// 3. 从对象容器中取出对象, 调用它// 参数1:传入服务容器中的别名// 参数2:一个空的数组{return call_user_func_array($this->instances[$alias], []);// 从instances中取出对象名// call_user_func_array :调用回调函数,并把一个数组参数作为回调函数的参数。}}// 将外部对象: Model, View的实例绑定到服务容器中$container = new Container;// 绑定模型类实例绑定到服务容器中$container->bInd('model', function(){return new Model();});$container->bInd('view',function(){return new View();});class Controller_2{public function Index(Container $container){$data = $container->make('model')-> myDate();return $container->make('view')->mysHow($data);}}
示例:
<?phpnamespace MVC_test;use Closure;//加载模型类require 'Model.php';//加载视图类require 'View.php';//服务容器class Container_1{// 1. 服务容器protected $instances = [];//定义一个空数组来存储对象public function bInd($alias, Closure $process)// 2. 向对象容器中添加对象// 参数1: 是外部对象在当前对象容器数组中的键名/别名// 参数2: 是当前需要绑定到容器的对象的实例化过程(函数){$this->instances[$alias] = $process;//将实例化过程写入服务容器}public function make($alias,$params=[])// 3. 从对象容器中取出对象, 调用它// 参数1:传入服务容器中的别名// 参数2:一个空的数组{return call_user_func_array($this->instances[$alias], []);// 从instances中取出对象名// call_user_func_array :调用回调函数,并把一个数组参数作为回调函数的参数。}}// 将外部对象: Model, View的实例绑定到服务容器中$container = new Container_1;// 绑定模型类实例绑定到服务容器中$container->bInd('model', function(){return new Model();});$container->bInd('view',function(){return new View();});// --------------------------------------------------------class Facade{//服务容器protected static $container =NULL;// 初始化方法:就是给当前的Facade类扣$container属性赋值//整理为Facade的构造方法//将外部的服务容器注入到当前的facade中public static function initialize(Container_1 $container){static::$container = $container;}}class UserModel extends Facade{public static function myDate(){return static::$container->make('model')->myDate();}}class UserView extends Facade{public static function mysHow($data){return static::$container->make('view')->mysHow($data);}}// --------------------------------------------------------class Controller_3{//构造方法,初始化facadepublic function __construct(Container_1 $container){Facade::initialize($container);}public function Index(){//1.获取数据$data =UserModel::myDate();//2.渲染模板return UserView::mysHow($data);}}
示例:
<?phpnamespace MVC_test;// --------------------------// require 'Controller.php';// $index = new Controller;// echo $index->Index();// ------------>Controller控制器的引用// require 'Controller_1.php';// $index = new Controller_1($data,$show);// echo $index->Index();// ------------>Controller_1控制器的引用// --------服务容器----------// require 'Controller_2.php';// $index = new Controller_2();// echo $index->Index($container);// ------------>Controller_2控制器的引用//-----------Facade-----------require 'Controller_3.php';$index = new Controller_3($container);echo $index->Index();
总结:在对MVC的学习中,掌握了服务容器及facade对类实例化对象的使用。不需要再对每个类实例化繁琐调用。也大体的掌握了面对对象编程的业务逻辑。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号