Blogger Information
Blog 41
fans 2
comment 0
visits 29224
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php之mvc架构思想
月光下,遗忘黑暗
Original
688 people have browsed it
  • facade门面
    外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。
    作用:
    1、它对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便
    2、实现了子系统与客户之间的松耦合关系
    3、如果应用需要,它并不限制它们使用子系统类。因此可以在系统易用性与能用性之间加以选择
  • 容器与依赖注入
    当A类需要依赖于B类,也就是说需要在A类中实例化B类的对象来使用时候,如果B类中的功能发生改变,也会导致A类中使用B类的地方也要跟着修改,导致A类与B类高耦合。这个时候解决方式是,A类应该去依赖B类的接口,把具体的类的实例化交给外部。
  • MVC架构
    m:model模型层
    v:view视图层
    c:controller控制器层

model层

  1. <?php
  2. namespace mvc_demo;
  3. use PDO;
  4. class Model
  5. {
  6. //获取数据
  7. public function getData()
  8. {
  9. 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);
  10. }
  11. }
  12. // print_r((new Model)->getData());

视图层

  1. <?php
  2. namespace mvc_demo;
  3. class View {
  4. public function fetch($data)
  5. {
  6. $table = '<table>';
  7. $table.='<caption>用户信息表</caption>';
  8. $table.= '<tr><th>编号</th><th>姓名</th><th>性别</th></tr>';
  9. foreach($data as $user)
  10. {
  11. $user['gender'] = $user['gender'] == 1 ?'男' : '女';
  12. $table.='<tr>';
  13. $table.='<td>'.$user['id'].'</td>';
  14. $table.='<td>'.$user['uname'].'</td>';
  15. $table.='<td>'.$user['gender'].'</td>';
  16. $table.='</tr>';
  17. }
  18. $table .= '</table>';
  19. return $table;
  20. }
  21. }
  22. echo '<style>
  23. table {border-collapse: collapse; border: 1px solid;text-align: center; width: 500px;height: 150px;width: 600px;}
  24. caption {font-size: 1.2rem; margin-bottom: 10px;}
  25. tr:first-of-type { background-color:lightblue;}
  26. td,th {border: 1px solid; padding:5px}
  27. </style>';
  28. // require 'Model.php';
  29. // $data = (new Model)->getData();
  30. // echo (new View)->fetch($data);

控制器层

  1. <?php
  2. namespace mvc_demo;
  3. //中间桥梁 控制器
  4. require 'Model.php';
  5. require 'View.php';
  6. // class Controller
  7. // {
  8. // //将依赖的外部对象 在操作方法中注入
  9. // public function index(Model $model,View $view){
  10. // // 1.获取数据
  11. // $data = $model->getData();
  12. // //2. 模板渲染
  13. // return $view->fetch($data);
  14. // }
  15. // public function edit(Model $model){
  16. // }
  17. // }
  18. class Controller {
  19. protected $model;
  20. protected $view;
  21. //通过构造方法将外部对象初始化,实现了外部依赖注入的对象在类内部的共享/复用
  22. public function __construct(Model $model, View $view)
  23. {
  24. $this->model = $model;
  25. $this->view = $view;
  26. }
  27. public function index(Model $model,View $view){
  28. // 1.获取数据
  29. $data = $this->model->getData();
  30. //2. 模板渲染
  31. return $this->view->fetch($data);
  32. }
  33. public function edit()
  34. {
  35. $this->model->editData();
  36. }
  37. }
  38. //客户端
  39. $model = new Model();
  40. $view = new View();
  41. $ctrl = new Controller($model,$view);
  42. // ECHO $ctrl->index($model,$view);
  43. echo call_user_func_array([$ctrl,'index'],[$model,$view]);
Correcting teacher:灭绝师太灭绝师太

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post