Blogger Information
Blog 53
fans 3
comment 0
visits 55251
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
12月4日-MVC框架基础-PHP培训线上九期班
邯郸易住宋至刚
Original
742 people have browsed it

一、课堂源代码全部写一遍,加上自己理解的注释

1、Demo1.php

代码

  1. <?php
  2. namespace _1204;
  3. use PDO;
  4. // static: 声明类中的静态成员
  5. // 1. 创建类
  6. class Db1
  7. {
  8. // 2. 添加类成员
  9. // 添加的静态成员: 属性, 方法
  10. // 静态属性
  11. //数据库连接对象
  12. protected static $pdo;
  13. //数据源
  14. protected static $dsn = 'mysql:host=127.0.0.1;dbname=mt';
  15. protected static $username = 'root';
  16. protected static $password = '111';
  17. // 静态方法
  18. //关键字static
  19. public static function connect()
  20. {
  21. // 在类中访问当前类的静态成员: self::
  22. self::$pdo = new PDO(self::$dsn, self::$username, self::$password);
  23. }
  24. // 测试方法
  25. public static function select()
  26. {
  27. // 连接数据库
  28. //这是惰性连接,需要的时候连接
  29. self::connect();
  30. //直接调用了query()方法
  31. return self::$pdo->query('SELECT * FROM `user` LIMIT 5', PDO::FETCH_ASSOC);
  32. }
  33. }
  34. // 3. 访问类成员
  35. // 在类的外部,访问类中的静态成员, 直接用类名
  36. $result = Db1::select();
  37. //var_dump($result);
  38. foreach ($result as $row) {
  39. echo '<pre>' . print_r($row, true) . '</pre>';
  40. }

结果

2、Demo2.php

代码

  1. <?php
  2. namespace _1204;
  3. // static: 后期静态绑定
  4. // 使用场景 : 静态继承的上下文环境中
  5. // 类成员访问绑定时间: 在声明的时候绑定, 在调用的时候绑定
  6. // 后期绑定就是在类成员被调用的时候再动态的绑定, 也叫:延迟绑定
  7. use PDO;
  8. // static: 声明类中的静态成员
  9. // 1. 创建类
  10. class Db2
  11. {
  12. // 2. 添加类成员
  13. // 添加的静态成员: 属性, 方法
  14. // 静态属性
  15. protected static $pdo;
  16. protected static $dsn = 'mysql:host=127.0.0.1;dbname=mt';
  17. protected static $username = 'root';
  18. protected static $password = '112';
  19. // 静态方法
  20. public static function connect()
  21. {
  22. // 在类中访问当前类的静态成员: self::
  23. static::$pdo = new PDO(static::$dsn, static::$username, static::$password);
  24. }
  25. // 测试方法
  26. public static function select()
  27. {
  28. // 连接数据库
  29. static::connect();
  30. return self::$pdo->query('select * from `user` where uid>3' , PDO::FETCH_ASSOC);
  31. }
  32. }
  33. class Sub extends Db2
  34. {
  35. protected static $username = 'root';
  36. protected static $password = '111';
  37. public static function connect()
  38. {
  39. self::$pdo = new PDO(self::$dsn, self::$username, self::$password);
  40. }
  41. }
  42. // 3. 访问类成员
  43. // 在类的外部,访问类中的静态成员, 直接用类名
  44. $result = Sub::select();
  45. //本意是想用子类中的connect();
  46. foreach ($result as $row) {
  47. echo '<pre>' . print_r($row, true) . '</pre>';
  48. }

结果

3、mvc\Demo1.php

代码

  1. <?php
  2. // 控制器: 将商品信息表展示出来
  3. namespace mvc;
  4. // 1. 加载模型
  5. require 'Model.php';
  6. // 2. 加载视图
  7. require 'View.php';
  8. // 3. 创建控制器
  9. class Controller1
  10. {
  11. public function index()
  12. {
  13. // 3.1 获取数据
  14. $model = new Model();
  15. $data = $model->getData();
  16. // 3.2 渲染模板
  17. $view = new View();
  18. return $view->fetch($data);
  19. }
  20. }
  21. // 4. 客户端调用/访问类成员
  22. $controller = new Controller1();
  23. echo $controller->index();

结果

4、mvc\Demo2.php

代码

  1. <?php
  2. // 控制器: 将商品信息表展示出来
  3. // 将类中对其它类的实例化, 模型/视图分离出来, 降低耦合度
  4. // 依赖注入
  5. namespace mvc;
  6. // 1. 加载模
  7. require 'Model.php';
  8. // 2. 加载视图
  9. require 'View.php';
  10. // 3. 创建控制器
  11. class Controller2
  12. {
  13. public function index(Model $model, View $view)
  14. {
  15. // 3.1 获取数据
  16. $data = $model->getData();
  17. // 3.2 渲染模板
  18. return $view->fetch($data);
  19. }
  20. }
  21. // 4. 客户端调用/访问类成员
  22. // 将模型与视图的实例化代码从控制器分离出来, 放到了客户端
  23. $model = new Model();
  24. $view = new View();
  25. // 将模型对象与视图对象,以参数的方式再次注入到控制器的方法
  26. $controller = new Controller2();
  27. echo $controller->index($model, $view);

结果

5、mvc\Demo3.php

代码

  1. <?php
  2. // 控制器: 将商品信息表展示出来
  3. // 依赖注入: 将注入点改到了控制器的构造方法中
  4. namespace mvc;
  5. // 1. 加载模型
  6. require 'Model.php';
  7. // 2. 加载视图
  8. require 'View.php';
  9. // 3. 创建控制器
  10. class Controller3
  11. {
  12. protected $model;
  13. protected $view;
  14. // 构造方法, 注入点改到了构造方法中, 实现了模型与视图对象的共享
  15. public function __construct(Model $model, View $view)
  16. {
  17. $this->model = $model;
  18. $this->view = $view;
  19. }
  20. public function index()
  21. {
  22. // 3.1 获取数据
  23. $data = $this->model->getData();
  24. // 3.2 渲染模板
  25. return $this->view->fetch($data);
  26. }
  27. }
  28. // 4. 客户端调用/访问类成员
  29. // 将模型与视图的实例化代码从控制器分离出来, 放到了客户端
  30. $model = new Model();
  31. $view = new View();
  32. // 将模型对象与视图对象,以参数的方式再次注入到控制器的方法
  33. $controller = new Controller3($model, $view);
  34. echo $controller->index();

结果

6、mvc\Demo4.php

代码

  1. <?php
  2. // 控制器: 将商品信息表展示出来
  3. // 依赖注入: 将注入点改到了控制器的构造方法中
  4. namespace mvc;
  5. //引用Closure别名
  6. use Closure;
  7. // 1. 加载模型
  8. require 'Model.php';
  9. // 2. 加载视图
  10. require 'View.php';
  11. /**************************************************/
  12. //添加服务容器层
  13. class Container
  14. {
  15. // 容器属性, 就是一个数组,里面全是创建对象的方法
  16. protected $instance = [];
  17. // 1. 放进去: 将类的实例化过程绑定到容器中
  18. // $alias: 类实例的别名,
  19. public function bind($alias, Closure $process)
  20. {
  21. // 将类实例化的方法绑定/ 存储到服务容器中
  22. $this->instance[$alias] = $process;
  23. }
  24. // 2. 取出来: 执行容器中的实例方法
  25. public function make($alias, $params=[])
  26. {
  27. return call_user_func_array($this->instance[$alias], []);
  28. }
  29. }
  30. // 实例化容器
  31. $container = new Container();
  32. // 用到模型对象, 视图对象,将它们绑定到容器中
  33. $container->bind('model', function () {return new Model();});
  34. $container->bind('view', function () {return new View();});
  35. /**************************************************/
  36. // 3. 创建控制器
  37. class Controller4
  38. {
  39. public function index(Container $container)
  40. {
  41. // 3.1 获取数据
  42. $data = $container->make('model')->getData();
  43. // 3.2 渲染模板
  44. return $container->make('view')->fetch($data);
  45. }
  46. }
  47. // 4. 客户端调用/访问类成员
  48. // 将模型对象与视图对象,以参数的方式再次注入到控制器的方法
  49. $controller = new Controller4();
  50. echo $controller->index($container);

结果

二、将Demo5手抄提交

三、总结

1、MVC:是一种编程模式

Model:用来操作数据表,与一张具体的数据表绑定
View:渲染页面,形成视图
Controller:有两个最基本的功能:获取数据和渲染页面

2、依赖注入

将注入点放在构造函数中,解决了数据共享问题

3、服务层容器

解决了对类的依赖的中的耦合问题

Facade静态代理:

解决了在类外部对于类成员访问的规范,统一以静态方式访问,不管原来是什么方式。

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