老莫的笔记本  
  
查看: 1012|回复: 1

TP5 依赖注入

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2018-8-10 23:18:21 | 显示全部楼层 |阅读模式
概念:
1.依赖注入:改变了使用对象前,必须先创建对象的传统方式,而是从外部注入所依赖的对象;
2.ThinkPHP5 依赖注入主要是指把对象注入到可访问控制器;
3.注入方式:控制器的构造方法和操作方法;
4.实现方法:对参数进行对象类型约束则会自动触发依赖注入,自动实例化对象;

// 如果想要 2可以访问 1中的变量有两种方法 【 这是前几课的内容 当然有第三种】
    // 第一种:继承基类controller 可以使用变量的属性
    // 第二种: 实例化请求类 来获取请求对象
    // 1.1 先去继承
    // 1.2 直接调用 request 的 param 来获取请求变量的值   写法见 mn3


    // 2.1 先导入Request 类;【视频中没继承,难道导入和继承不一样?】  
    // 2.2 使用 Request::instance()  获得请求对象 详情见 mn4



    第三种:【官方推荐,不需要依赖于控制器基类,也不需要导入命名空间,效率更高】
   【其实吧 我觉得吧 所谓的变量共享 就是搞个参数 丢到初始化的状态 然后每个都可以访问  ,但是共享的不是这个参数的值 而是这个参数的键  是不是很奇怪 嘿嘿】
  1. <?php
  2. namespace app\articles\controller;
  3. // use think\Controller;        这是1.1  继承的是 基类
  4. // class Yz extends Controller   这是1.1
  5. use think\Request;   //    这是 2.1 导入请求类
  6. class Yz
  7. {
  8.     // 3.2 创建构造方法 第一步 创建一个属性 用来存放请求对象
  9.     protected $request ;
  10.     // 3.3 创建构造方法 并且 注入依赖对象
  11.     public function __construct(Request $request)
  12.     {
  13.         // 这个构造函数的作用就是  先实例化请求类。然后赋值给 request
  14.        $this->request = Request::instance() ;
  15.     }
  16.     public function mn1($lma)
  17.     {
  18.         return '学习课程是:'.$lma;
  19.     }
  20.     public function mn2()
  21.     {
  22.         return '学习课程是:'.$lma;
  23.     }
  24.     // 如果想要 2可以访问 1中的变量有两种方法 【 这是前几课的内容 当然有第三种】
  25.     // 第一种:继承基类controller 可以使用变量的属性
  26.     // 第二种: 实例化请求类 来获取请求对象
  27.     // 1.1 先去继承
  28.     // 1.2 直接调用 request 的 param 来获取请求变量的值   写法见 mn3
  29.    
  30.     // 2.1 先导入Request 类;【视频中没继承,难道导入和继承不一样?】  
  31.     // 2.2 使用 Request::instance()  获得请求对象 详情见 mn4
  32.    
  33.     public function mn3()
  34.     {
  35.         return '学习课程是:'.$this->request->param('lma');  //这种写法 不需要传入参数 直接输出请求的变量
  36.     }
  37.     public function mn4()
  38.     {
  39.         return '学习课程是:'.Request::instance()->param('lma');  //这种写法 不需要传入参数 直接输出请求的变量
  40.     }
  41.     // 第三种:将请求变量,以方法参数的方式直接注入到当前的操作中
  42.     // 然后将参数申明为 request 类型,当我们使用时 会自动触发实例化过程 创建request 对象 这就叫注入
  43.     // 但是 在mn5 注入的请求对象 $request 并不能在 mn7中调用  为了能调用, 就把这个对象注入到构造方法中
  44.     //
  45.    
  46.     //  public function mn5(Request $request)  
  47.     //  // 要实例化的对象 就是这个 request  [ 我在想啊 是不是换个名字也可以? 你还别说 真可以 看mn6 这果然只是个名称 ]  这个写法 就叫注入 向该操作注入一个对象  这个注释 是因为 后面不需要在操作中注入了 所以我保存个记录
  48.     // {
  49.     //     return '学习课程是:'.$request->param('lma');  
  50.     // }
  51.    
  52.     // public function mn6(Request $rd)  // 访问时 自动实例化了这个 $rd对象  ; 然后操作这个对象 即可 【咋操作 是不是傻 对象 属性方法怎么调用 就怎么操作呗】
  53.     // {
  54.     //     return '学习课程是:'.$rd->param('lma');  
  55.     // }
  56.      public function mn7()  
  57.     {   
  58.         // return '学习课程是:'.$request->param('lma');   // 写构造函数之前的写法
  59.         return '学习课程是:'.$this->request->param('lma');
  60.         
  61.     }
  62.     public function mn8()   // 写这个 就是为了 替换掉 mn5   看好了 mn7 和 mn8 没有变量做参数
  63.     {
  64.         // return '学习课程是:'.$request->param('lma');
  65.          return '学习课程是:'.$this->request->param('lma');
  66.     }
  67. }
复制代码




回复

使用道具 举报

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
 楼主| 发表于 2018-8-10 23:18:52 | 显示全部楼层
最终的访问网址:http://localhost/public/index.php/articles/Yz/mn8/lma/%E9%87%91%E9%BA%92%E9%BA%9F
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表