批改状态:合格
老师批语:框架本身就非常的抽象, 都是对具体业务的封装, 这些设计模式是开发者必须了解的理论基础, 有必要搞明白..., 我也见过对这些不知道的一样写代码, 但他想提升就非常困难了, 现在不要欠帐, 否则将来会加倍还
Model:模型类,数据库操作View:视图类,展示到客户端Controller:控制器Model代码:
<?phpnamespace mvc_demo;// Model 模型类: 用于数据库操作class Model{public function getData(){return (new \PDO('mysql:host=localhost;dbname=phpedu', 'root','root'))->query('SELECT * FROM `salary` LIMIT 15')->fetchAll(\PDO::FETCH_ASSOC);}}
View代码:
<?phpnamespace mvc_demo;// 视图类class View{public function fetch($data){$table = '<table>';$table .= '<caption>员工工资明细</caption>';$table .= '<tr><th>ID</th><th>工号</th><th>姓名</th><th>入职日期</th><th>部门</th><th>岗位</th><th>工作天</th><th>应发</th></tr>';// 将数据循环遍历出来foreach ($data as $salary) {$table .= '<tr>';$table .= '<td>' . $salary['id'] .'</td>';$table .= '<td>' . $salary['msnv'] .'</td>';$table .= '<td>' . $salary['name'] .'</td>';$table .= '<td>' . date('Y-m-d', $salary['hiredate']) . '</td>';$table .= '<td>' . $salary['donvi'] . '</td>';$table .= '<td>' . $salary['congviec'] . '</td>';$table .= '<td>' . $salary['ngaycong'] . '</td>';$table .= '<td>' . $salary['salary'] . '</td>';$table .= '</tr>';}$table .= '</table>';return $table;}}echo '<style>table {border-collapse: collapse; border: 1px solid;text-align: center; margin: auto;}caption {font-size: 1.2rem; margin-bottom: 10px;}tr:first-of-type { background-color:wheat;}td,th {border: 1px solid; padding:5px}</style>';
控制器一(普通注入):
<?phpnamespace mvc_demo;// 控制器2// 1. 加载模型类require 'Model.php';// 2. 加载视图require 'View.php';// 3. 创建控制class Controller2{public function index(Model $model, View $view){// 1. 获取数据$data = $model->getData();// 2. 渲染模板/视图return $view->fetch($data);}}// 客户端:$model = new Model;$view = new View;// 实例化控制器类$controller = new Controller2;echo $controller->index($model, $view);
控制器二(构造方法注入):
<?phpnamespace mvc_demo;// 控制器3// 1. 加载模型类require 'Model.php';// 2. 加载视图require 'View.php';// 3. 创建控制class Controller3{// 依赖对象属性: 对象参数private $model;private $view;public function __construct(Model $model, View $view){$this->model = $model;$this->view = $view;}public function index(){// 1. 获取数据$data = $this->model->getData();// 2. 渲染模板/视图return $this->view->fetch($data);}public function index1(){// 1. 获取数据$data = $this->model->getData();// 2. 渲染模板/视图return $this->view->fetch($data);}}// 客户端:$model = new Model;$view = new View;// 实例化控制器类$controller = new Controller3($model, $view);echo $controller->index1();
控制器三(对象容器):
<?phpnamespace mvc_demo;// 控制器4// 1. 加载模型类require 'Model.php';// 2. 加载视图require 'View.php';// 3. 服务容器class Container1{// 对象容器protected $instances = [];// 绑定: 向对象容器中添加一个类实例public function bind($alias, \Closure $process){$this->instances[$alias] = $process;}// 取出: 从容器中取出一个类实例 (new)public function make($alias, $params = []){return call_user_func_array($this->instances[$alias], []);}}$container = new Container1;// 绑定$container->bind('model', function () {return new Model;});$container->bind('view', function () {return new View;});// 4. 创建控制class Controller4{public function index(Container1 $container){// 1. 获取数据$data = $container->make('model')->getData();// 2. 渲染模板/视图return $container->make('view')->fetch($data);}}// 客户端:// 实例化控制器类$controller = new Controller4();echo $controller->index($container);

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号