学习tp5.1的容器前需要先了解两个助手函数:
app() --->快速获取容器中的实例 支持依赖注入
bind()--->快速绑定对象实例
支持使用依赖注入的场景包括(但不限于):
控制器架构方法;
控制器操作方法;
数据库和模型事件方法;
路由的闭包定义;
行为类的方法;
例子:控制器构造方法、控制器操作方法的注入例子
<?php
namespace app\index\controller;
use app\index\model\User;
class Index
{
protected $user;
//构造方法中依赖注入,
public function __construct(User $user)
{
$this->user = $user;
}
public function hello()
{
return 'Hello,' . $this->user->name . '!';
}
//控制器操作方法
public function userInfo(User $user)
{
echo $user->name;
}
}//使用助手函数注入<?php
namespace app\index\controller;
class Index
{
//控制器操作方法
public function userInfo()
{
bind('user','app\common\controller\User');
echo app("user")->name;
//bind()--->相当于增加了识别名【唯一标识】-->方便app()的调用
//当然也可以这样使用下面的这句话等价于上面的
echo app('app\common\controller\User')->name;
//官方说明:容器中已经调用过的类会自动使用单例,除非你使用下面的方式强制重新实例化。// 每次调用都会重新实例化->$cache = app('user',true);
//更多的绑定方式可以参考手册的说明【bind()】
}
}使用文件的绑定类到容器中,这样在使用app()助手函数时就可以直接使用唯一标识进行绑定可以在应用或者模块目录下面定义provider.php文件(返回一个数组),系统会自动批量绑定类库到容器中。
return [
'user' => app\common\controller\User::class,
];系统内置绑定到容器中的类库:
自动注入:【在路由中使用】
Route::get('user/:id','index/Index/hello')
->model('\app\index\model\User');自定义实例化【参考手册说明】最佳答案