Blogger Information
Blog 47
fans 1
comment 0
visits 53079
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP - MVC
晴天
Original
627 people have browsed it

MVC 原理

  • mvc 是 modle view controller 的缩写;
缩写 全拼 描述 备注
M Model 模型 核心数据层,程序需要操作的数据放这里
V View 视图 提供给用户的操作页面
C Controller 控制器 根据用户从视图层的指令访问模型层,产生最终结果
  • 创建模型类 Model.php
    ```php
    <?php

namespace mvc_demo;

//模型类 :链接数据库

class Model
{
public function getData()
{
// 返回数据库的数据
return (new \PDO(‘mysql:host=localhost;dbname=php11.edu’,’php11.edu’,’php11.edu’))
->query(‘SELECT * FROM staffs LIMIT 15’)
->fetchAll(\PDO::FETCH_ASSOC);

  1. }

}

  1. - 创建是视图类 View.php
  2. ```php
  3. <?php
  4. namespace mvc_demo;
  5. //视图类
  6. class View{
  7. public function fetch($data){
  8. $table = '<table>';
  9. $table .= '<caption>员工信息表</caption>';
  10. $table .= '<tr><th>ID</th><th>姓名</th><th>性别</th><th>职务</th><th>手机号</th><th>入职时间</th></tr>';
  11. // 将数据循环遍历出来
  12. foreach ($data as $staff) {
  13. $table .= '<tr>';
  14. $table .= '<td>' . $staff['id'] . '</td>';
  15. $table .= '<td>' . $staff['name'] . '</td>';
  16. $table .= '<td>' . ($staff['sex'] ? '男' : '女') . '</td>';
  17. $table .= '<td>' . $staff['position'] . '</td>';
  18. $table .= '<td>' . $staff['mobile'] . '</td>';
  19. $table .= '<td>' . date('Y年m月d日', $staff['hiredate']) . '</td>';
  20. $table .= '</tr>';
  21. }
  22. $table .= '</table>';
  23. return $table;
  24. }
  25. }
  26. echo '<style>
  27. table {border-collapse: collapse; border: 1px solid;text-align: center; width: 500px;height: 150px;width: 600px;}
  28. caption {font-size: 1.2rem; margin-bottom: 10px;}
  29. tr:first-of-type { background-color:wheat;}
  30. td,th {border: 1px solid; padding:5px}
  31. </style>';
  • 创建控制器 Controller

方法1

  1. <?php
  2. namespace mvc_demo;
  3. //控制器1
  4. // 加载模型类,视图类
  5. require 'Model.php';
  6. require 'View.php';
  7. //创建控制
  8. class Controller
  9. {
  10. public function index(){
  11. // 获取数据
  12. //实例化模型跟视图类
  13. $model = new Model();
  14. $data = $model->getData();
  15. $view = new View();
  16. return $view->fetch($data);
  17. }
  18. }
  19. //实例化输出
  20. echo (new Controller())->index();
  21. //输出成功
  • 此方法 当前类中对其他类的实例化都在当前类完成,造成代码间的耦合性过高,过分依赖外部对象
  • 可以使用依赖注入的方式 解决当前问题

方法2

  1. <?php
  2. namespace mvc_demo;
  3. //控制器1
  4. // 加载模型类,视图类
  5. require 'Model.php';
  6. require 'View.php';
  7. //创建控制
  8. class Controller
  9. {
  10. private $model;
  11. private $view;
  12. // 依赖注入点使用构造方法 这样可以实现代码的共用 比如类中有多个方法
  13. public function __construct(Model $model, View $view)
  14. {
  15. $this->model = $model;
  16. $this->view = $view;
  17. }
  18. //方法1
  19. public function index(){
  20. // 获取数据
  21. $data = $this->model->getData();
  22. return $this->view->fetch($data);
  23. }
  24. // 方法2
  25. public function index1(){
  26. // 获取数据
  27. $data = $this->model->getData();
  28. return $this->view->fetch($data);
  29. }
  30. }
  31. //实例化输出
  32. $model = new Model();
  33. $view = new View();
  34. echo (new Controller($model,$view))->index();
  35. //输出成功
  • 我们这里创建的对象都是彼此独立的,可以考虑给这些对象创建一个管家 = ”服务容器“ = container
  • 进行统一的处理和实例化
  • 两个功能: 1 将对象绑定到容器中 bind 2 把对象从容器中取出来 make

    方法三

  1. <?php
  2. namespace mvc_demo;
  3. //控制器1
  4. // 加载模型类,视图类
  5. require 'Model.php';
  6. require 'View.php';
  7. //服务容器
  8. class Container
  9. {
  10. // 创建对象容器
  11. protected $instances = [];
  12. //绑定 向容器中添加一个类实例
  13. public function bind($alias, \Closure $process)
  14. {
  15. $this->instances[$alias] = $process;
  16. }
  17. // 取出 从容器中取出一个类实例
  18. public function make($alias, $params = [])
  19. {
  20. return call_user_func_array($this->instances[$alias],[]);
  21. }
  22. }
  23. //创建类实例
  24. $container = new Container();
  25. //绑定
  26. $container->bind('model',function (){return new Model();});
  27. $container->bind('view',function (){return new View();});
  28. //创建控制
  29. class Controller
  30. {
  31. public function index(Container $container)
  32. {
  33. // 获取数据
  34. $data = $container->make('model')->getData();
  35. return $container->make('view')->fetch($data);
  36. }
  37. }
  38. //实例化控制器类
  39. $controller = new Controller();
  40. echo $controller->index($container);
  41. //输出成功

总结

mvc 实现将逻辑,数据,界面分离 使同一个程序有不同的表现形式,易于程序维护和修改

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:mvc, 是不是没有想像中的难?
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