- 昨晚看了下个laravel框架的教学视频. 发现控制器里经常出现function xx (Request, $request)这种写法.
- 视频里面的老师, 并没有讲为什么需要进行这样一部操作? 感觉他是习惯性的, 自然而然的, 下意识地会加这个东西.
- 作为初学者, 有点懵. 怎么理解依赖注入? 什么时候需要用到依赖注入呢?
因为在 Laravel 中,控制器是通过容器去解析的,当把路由对应的控制器方法传递给容器,容器在解析时,会分析方法需要的参数,然后根据参数的类型去通过容器实例化对应类型的对象,如果这个这个类型是一个接口或抽象类,就在容器中寻找绑定,然后对实际绑定的对象进行实例化。
说简单点儿就是容器帮我们 new 了一个实例,然后传参进来,实现的代码解耦。
在控制器方法中,还有路由参数的传入,这一步由路由解析器完成。
如何理解 Laravel 和 ThinkPHP 5 中的服务容器与注入? - 开发中的一些奇技淫巧 - SegmentFault 思否
依赖注入两个关键
IOC容器
,管理需要注入的实例以及依赖关系
被注入的类
不能被程序员手动实例化
像你说的Laravel这里,Controller是由IOC容器实例化的(你没有new过controller对吧
)。然后通过反射读取方法的参数列表,如果读取到的type是class,则去IOC容器查询有没有改实例,如果没有,实例化之后注入
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答975 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.1k 阅读
1 回答1.1k 阅读
依赖注入,你可以分开理解。拆成,依赖和注入
依赖:就是你现在要用 request 对象的get 方法,所有你必须要先能得到request对象,然后才能使用这个方法。这个就是依赖。
注入:怎么得到request 对象呢?一种是你直接 $request =new Request() 可以得到,这种也称为主动获取,还有一种就是把整个对象当做一个参数传进来,类型你截图这种,然后去使用。这个就是依赖注入,控制反转(IOC)
一般的做法是会在 construct 方法里面直接注入,后面需要的去使用它。
现在的框架设计思想大多会怎么写,可以提高框架的性能,因为只要使用的时候才会实例化。