zoukankan      html  css  js  c++  java
  • 如何理解ThinkPHP框架里的依赖注入

    今天突然又一次在控制器中看到下面这样的代码,laravel中也有.
    publicfunctiongetReqInfo(Request$request){
    代码
    }
    先说自己目前的认知和疑问:
    依赖输入是一种设计模式,实质是把一个类不可能更换的部分和可更换的部分分离开来,通过注入的方式来使用,从而达到解耦的目的.
    这不是有些类似trait吗?
    不是相当于在类A中使用类B里的方法吗?有多种实现方式,最常见的先引入,实例化,再调用.
    通过依赖注入调用其他类以及类里的方法,和其它调用方式有什么区别呢?
    上述代码里,方法后所传入的参数
    Request,这个作用是类似强类型语言里的限定类型,表示限定在Request类下
    $request,表示限定在Request类下的$request对象?
    该怎么正确理解解依赖注入呢?有没有什么通俗易懂的例子或者表述?
        
    依赖注入,你可以分开理解。拆成,依赖和注入依赖:就是你现在要用request对象的get方法,所有你必须要先能得到request对象,然后才能使用这个方法。这个就是依赖。注入:怎么得到request对象呢?一种是你直接$request=newRequest()可以得到,这种也称为主动获取,还有一种就是把整个对象当做一个参数传进来,类型你这样的写法,然后去使用。这个就是依赖注入,控制反转(IOC)一般的做法是会在construct方法里面直接注入,后面需要的去使用它。现在的框架设计思想大多会怎么写,可以提高框架的性能,因为只要使用的时候才会实例化。
    trait的使用一般是为了解决多继承问题.不是相当于在类A中使用类B里的方法吗?有多种实现方式,最常见的先引入,实例化,再调用.是这么理解的,依赖注入也只是一种实现方式。依赖注入这种方式,可以利用懒加载,使用的时候才会实例化。
    publicfunctiongetReqInfo(Request$request){
    代码
    }这样写的话,表示我可以使用Request对象的方法,如果我还要使用其它的,可以继续往里加。publicfunctiongetReqInfo(Request$request,Response$response){
    代码
    }
  • 相关阅读:
    Java面试题总结之JDBC 和Hibernate
    Java面试题总结之数据库与SQL语句
    Java面试题总结之OOA/D,UML,和XML
    Java面试题总结之数据结构、算法和计算机基础(刘小牛和丝音的爱情故事1)...
    文件路径的引用问题(配置文件路径vue.config.js)
    vue-cli2引入Bootstrap和jQuery
    ES6常用语法总结
    vue-cli4引入jquery和bootstrap
    vue-router的两种模式(hash和history)及区别
    本地存储localStorage的用法总结
  • 原文地址:https://www.cnblogs.com/liliuguang/p/12372095.html
Copyright © 2011-2022 走看看