博客列表 >MVC与框架基础-九期PHP线上班

MVC与框架基础-九期PHP线上班

emagic
emagic原创
2019年12月06日 08:57:52657浏览

12月4日作业

1. 将课堂源代码, 全部写一遍, 在编辑器中写就可, 必须全部运行正确, 并加上自己理解的注释,不用手写

  1. <?php
  2. //控制器,将商品信息展示出来
  3. namespace mvc;
  4. //MVC基本套路
  5. //1.加载模型 **M**
  6. require 'Model.php';
  7. //2.加载视图 **V**
  8. require 'View.php';
  9. //3.创建控制器**C**
  10. class Controller1{
  11. public function index(){
  12. //3.1获取数据
  13. $model=new Model();
  14. $data=$model->getData();
  15. //3.2渲染模板
  16. $view=new View();
  17. return $view->fetch($data);
  18. }
  19. }
  20. //4.客户端调用/访问类成员
  21. $controller = new Controller1();
  22. echo $controller->index();
  1. <?php
  2. //控制器,将商品信息展示出来
  3. //将类中对其他类的实例化,模型/视图分类出来,降低耦合度
  4. //依赖注入
  5. namespace mvc;
  6. //MVC基本套路
  7. //1.加载模型 **M**
  8. require 'Model.php';
  9. //2.加载视图 **V**
  10. require 'View.php';
  11. //3.创建控制器**C**
  12. class Controller2{
  13. public function index(Model $model,View $view){
  14. //php现在已经支持类型定义了$model是Model 类的实例,$view是View类的对象,记着依赖注入的这种写法☆☆☆☆☆☆
  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);
  1. <?php
  2. //控制器,将商品信息展示出来
  3. //将类中对其他类的实例化,模型/视图分类出来,降低耦合度
  4. //依赖注入:将注入点该到控制器的构造方法中
  5. namespace mvc;
  6. //MVC基本套路
  7. //1.加载模型 **M**
  8. require 'Model.php';
  9. //2.加载视图 **V**
  10. require 'View.php';
  11. //3.创建控制器**C**
  12. class Controller3{
  13. protected $model;
  14. protected $view;
  15. //构造方法,注入点改到了构造方法中,实现了模型与视图对象的共享
  16. public function __construct(Model $model,View $view)
  17. {
  18. $this->model=$model;
  19. $this->view=$view;
  20. }
  21. public function index(){
  22. //php现在已经支持类型定义了$model是Model 类的实例,$view是View类的对象,记着依赖注入的这种写法☆☆☆☆☆☆
  23. //3.1获取数据
  24. $data=$this->model-> getData();
  25. //3.2渲染模板
  26. return $this->view->fetch($data);
  27. }
  28. }
  29. //4.客户端调用/访问类成员
  30. //将模型与视图的实例化代码从控制器分离出来,把实例化代码放到客户端
  31. $model=new Model();
  32. $view=new View();
  33. //将模型对象与视图对象,以参数的方式再次注入放到控制器的方法
  34. $controller = new Controller3($model,$view); //参数不再放在普通方法中而是构造方法中
  35. echo $controller->index();
  1. <?php
  2. //控制器,将商品信息展示出来
  3. //将类中对其他类的实例化,模型/视图分类出来,降低耦合度
  4. //依赖注入:将注入点该到控制器的构造方法中
  5. namespace mvc;
  6. //MVC基本套路
  7. //1.加载模型 **M**
  8. require 'Model.php';
  9. //2.加载视图 **V**
  10. require 'View.php';
  11. //添加一个服务容器层
  12. class Container
  13. {
  14. //先创建个容器属性放对象,其实就是一个数组,里面全是创建对象的方法
  15. protected $instance=[];
  16. //1.放进去:将类的实例化过程绑定到容器中
  17. //$alias:当前类实例的别名,会作为关联数组的键名
  18. public function bind($alias,\Closure $process){
  19. //将类实例化的方法绑定/存储到服务容器中
  20. $this->instance[$alias]=$process;
  21. }
  22. //2.取出来:执行容器中的实例方法
  23. public function make($alias,$params=[]){
  24. return call_user_func_array($this->instance[$alias],[]);
  25. }
  26. }
  27. //实例化容器
  28. $container = new Container();
  29. //用到模型对象 ,视图对象,将他们绑定到容器中。
  30. $container->bind('model',function (){return new Model();});
  31. $container->bind('view',function (){return new View();});
  32. /***************************************************************/
  33. //3.创建控制器**C**
  34. class Controller4{
  35. public function index(Container $container){
  36. // 对象已经注入到容器里面了,这里只要注入容器就行
  37. //php现在已经支持类型定义了$model是Model 类的实例,$view是View类的对象,记着依赖注入的这种写法☆☆☆☆☆☆
  38. //3.1获取数据
  39. $data=$container->make('model')-> getData();
  40. //3.2渲染模板
  41. return $container->make('view')->fetch($data);
  42. }
  43. }
  44. //4.客户端调用/访问类成员
  45. //将模型对象与视图对象,以参数的方式再次注入放到控制器的方法
  46. $controller = new Controller4(); //参数不再放在普通方法中而是构造方法中
  47. echo $controller->index( $container);

2. 将最后一个demo5.php中的代码, 手写提交

作业总结

一、MVC基本套路:

1.加载模型 M
2.加载视图 V
3.创建控制器C
3.1获取数据
3.2渲染模板
4.客户端调用/访问类成员

二、依赖注入

解耦,降低耦合度
避免在一个类中new 一个实例对象,尽可能用参数注入的方式

注入点就是把参数放到不同的方法中,就是参数列表,参数写哪个方法里,哪里就是注入点

  1. class Controller2{
  2. public function index(Model $model,View $view){
  3. //php现在已经支持类型定义了$model是Model 类的实例,$view是View类的对象 记着依赖注入的这种写法☆☆☆☆☆☆

三、将普通方法注入改为构造注入

普通方法注入-》适用一次性的情况
构造方法注入-》多次、共享属性

四、容器:进一步共享

服务容器,统一管理,容器有两个基本功能:
0.先添加一个容器层,创建个容器属性放对象,其实就是一个数组,里面全是创建对象的方法 protected $instance=[];
1.放进来(绑定)将类的实例化过程绑定/存储到服务容器中
public function bind($alias,\Closure $process)
第二个参数是闭包类的代码,就是相当于new的过程
$this->instance[$alias]=$process;
$this->数组【键名(对象)】=值(闭包函数)
2.取出去 执行容器中的实例方法
```php

public function make($alias,$params=[]){
return call_user_func_array($this->instance[$alias],[]);
}
}

//实例化容器
$container = new Container();
//用到模型对象 ,视图对象,将他们绑定到容器中。
$container->bind(‘model’,function (){return new Model();});
$container->bind(‘view’,function (){return new View();});

五、静态类优化代码:Facade

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议