今天突然又一次在控制器中看到下面这样的代码, laravel中也有.
public function getReqInfo(Request $request){
代码
}
先说自己目前的认知和疑问:
-
依赖输入是一种设计模式, 实质是把一个类不可能更换的部分 和 可更换的部分 分离开来,通过注入的方式来使用,从而达到解耦的目的.
- 这不是有些类似trait吗?
- 不是相当于在类A中使用类B里的方法吗? 有多种实现方式, 最常见的先引入, 实例化, 再调用.
- 通过依赖注入调用其他类以及类里的方法, 和其它调用方式有什么区别呢?
-
上述代码里, 方法后所传入的参数
- Request, 这个作用是类似强类型语言里的限定类型, 表示限定在Request类下
- $request, 表示限定在Request类下的$request对象?
- 该怎么正确理解解依赖注入呢? 有没有什么通俗易懂的例子或者表述?
依赖注入,你可以分开理解。拆成,依赖和注入
依赖:就是你现在要用 request 对象的get 方法,所有你必须要先能得到request对象,然后才能使用这个方法。这个就是依赖。
注入:怎么得到request 对象呢?一种是你直接 $request =new Request() 可以得到,这种也称为主动获取,还有一种就是把整个对象当做一个参数传进来,类型你这样的写法,然后去使用。这个就是依赖注入,控制反转(IOC)
一般的做法是会在 construct 方法里面直接注入,后面需要的去使用它。
现在的框架设计思想大多会怎么写,可以提高框架的性能,因为只要使用的时候才会实例化。
trait 的使用一般是为了解决多继承问题.
不是相当于在类A中使用类B里的方法吗? 有多种实现方式, 最常见的先引入, 实例化, 再调用.
是这么理解的,依赖注入也只是一种实现方式。
依赖注入这种方式,可以利用懒加载,使用的时候才会实例化。
public function getReqInfo(Request $request){
}
这样写的话,表示我可以使用 Request 对象的方法,如果我还要使用其它的,可以继续往里加。
public function getReqInfo(Request $request, Response $response){
}
如果你还不清楚的话,可以去看看laravel 官网里面,关于依赖注入的文档