thinkphp5.1 容器 整理

浏览:6338 发布日期:2018/09/29 分类:ThinkPHP5专区 关键字: thinkphp5.1 容器
容器作用:用来更方便的管理类依赖及运行依赖注入。
学习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');
自定义实例化【参考手册说明】





最佳答案
评论( 相关
后面还有条评论,点击查看>>