服务容器
就是普通的ioc容器,因为是用来管理服务(组件)的,所以叫服务容器
这个服务容器在哪?
容器类的具体路径 vendor/laravel/framework/src/Illuminate/Container/Container.php
如何把服务绑定到这个容器?
容器类有个 bind 方法,可以把服务绑定到容器类的 bindings 属性,这是个大数组
容器类中还有个singleton方法,也是用来绑定的,是对bind方法的封装,可以看到服务提供者中,都是用这两个方法注册到容器的
例如下面的redis服务
如何取出容器中的服务使用呢?
使用容器类的make方法
但是,请注意,一般不会直接操作这个 Container 容器类,而是会使用它的子类
laravel1/vendor/laravel/framework/src/Illuminate/Foundation/Application.php
Application类能使用Container的所有方法
有没有更方便的取出服务的方法呢?
有,在 laravel1/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php 中有个app助手函数,可以用来取出服务,调用的是Application对象,我们在控制器中取出服务的时候, app('db') 这么写就可以了