ThinkPHP 5.1 记录(二) 依赖注入 容器

官方说明:容器和依赖注入5.1版本正式引入了容器的概念,用来更方便的管理类依赖及运行依赖注入。依赖注...

官方说明:

容器和依赖注入

5.1版本正式引入了容器的概念,用来更方便的管理类依赖及运行依赖注入。


5.0版本已经支持依赖注入的,依赖注入和容器没有必然关系


容器类的工作由think\Container类完成,但大多数情况我们只需要通过app助手函数即可完成大部分操作。


依赖注入其实本质上是指对类的依赖通过构造器完成自动注入,例如在控制器架构方法和操作方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于访问控制器的参数都来自于URL请求,普通变量就是通过参数绑定自动获取,对象变量则是通过依赖注入生成。

image.png


代码:

	// 依赖注入
	public function getMethod(\app\common\Test $temp){
		// 等价于
		// $temp = new \app\common\Test;
		return $temp;
	}
	// 绑定容器
	public function bind(){
		// 绑定一个类到容器中,相当于注册到容器中
		\think\Container::set('test','\app\common\Test');
		// 或使用助手函数bind()
		bind('test','\app\common\Test');

		// 将容器中的类实例化并取出来用,实例化时同时调用构造器进行初始化
		$test = \think\Container::get('test',['name'=>'testname']);
		// 或使用助手函数app()
		$test = app('test',['name'=>'testname']);
		return $test;

		// 绑定一个闭包到容器中
		\think\Container::set('demo',function($name){
			return 'name='.$name;
		})
		// 相当于:
		$demo = function($name){
			return 'name='.$name;
		}

		// 将容器中的闭包取出来
		$dem = \think\Container::get('demo',['name'=>'demoname']);
		return $dem;
	}


image.png

评论