批改状态:合格
老师批语:
- facade门面
外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。
作用:
1、它对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便
2、实现了子系统与客户之间的松耦合关系
3、如果应用需要,它并不限制它们使用子系统类。因此可以在系统易用性与能用性之间加以选择- 容器与依赖注入
当A类需要依赖于B类,也就是说需要在A类中实例化B类的对象来使用时候,如果B类中的功能发生改变,也会导致A类中使用B类的地方也要跟着修改,导致A类与B类高耦合。这个时候解决方式是,A类应该去依赖B类的接口,把具体的类的实例化交给外部。- MVC架构
m:model模型层
v:view视图层
c:controller控制器层model层
<?phpnamespace mvc_demo;use PDO;class Model{//获取数据public function getData(){return (new PDO('mysql:host=localhost;dbname=phpedu','root','zhoujielun521'))->query("SELECT `id`,`uname`,`gender` FROM `users` ORDER BY `id` asc LIMIT 0,10")->fetchAll(PDO::FETCH_ASSOC);}}// print_r((new Model)->getData());
视图层
<?phpnamespace mvc_demo;class View {public function fetch($data){$table = '<table>';$table.='<caption>用户信息表</caption>';$table.= '<tr><th>编号</th><th>姓名</th><th>性别</th></tr>';foreach($data as $user){$user['gender'] = $user['gender'] == 1 ?'男' : '女';$table.='<tr>';$table.='<td>'.$user['id'].'</td>';$table.='<td>'.$user['uname'].'</td>';$table.='<td>'.$user['gender'].'</td>';$table.='</tr>';}$table .= '</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:lightblue;}td,th {border: 1px solid; padding:5px}</style>';// require 'Model.php';// $data = (new Model)->getData();// echo (new View)->fetch($data);
控制器层
<?phpnamespace mvc_demo;//中间桥梁 控制器require 'Model.php';require 'View.php';// class Controller// {// //将依赖的外部对象 在操作方法中注入// public function index(Model $model,View $view){// // 1.获取数据// $data = $model->getData();// //2. 模板渲染// return $view->fetch($data);// }// public function edit(Model $model){// }// }class Controller {protected $model;protected $view;//通过构造方法将外部对象初始化,实现了外部依赖注入的对象在类内部的共享/复用public function __construct(Model $model, View $view){$this->model = $model;$this->view = $view;}public function index(Model $model,View $view){// 1.获取数据$data = $this->model->getData();//2. 模板渲染return $this->view->fetch($data);}public function edit(){$this->model->editData();}}//客户端$model = new Model();$view = new View();$ctrl = new Controller($model,$view);// ECHO $ctrl->index($model,$view);echo call_user_func_array([$ctrl,'index'],[$model,$view]);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号