ThinkPHP6.0 容器和依赖注入
分为如下两部分:
依赖注入
依赖注入其实本质上是指对类的依赖通过构造器完成自动注入;
在控制器架构方法和操作和方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于访问控制器的参数都来自于 URL 请求,普通变量就是通过参数绑定自动获取,对象变量则是通过依赖注入生成。
案例:
// 模型层 One
namespace app\model;
use think\Model;
class One extends Model
{
public $username = 'laowen';
} // 控制器
namespace app\controller;
use app\model\One;
class TestOne
{
protected $one;
public function __construct(One $one)
{
$this->one = $one;
}
public function index()
{
return $this->one->username;
}
}
依赖注入:即允许通过类的方法传递对象的能力,并且限制了对象的类型(约束);
而传递的对象背后的那个类被自动绑定并且实例化了,这就是依赖注入;
支持使用依赖注入的场景包括(但不限于):
- 控制器架构方法;
- 控制器操作方法;
- 路由的闭包定义;
- 事件类的执行方法;
- 中间件的执行方法;
容器
依赖注入的类统一由容器管理的,大多数情况下是自动绑定和自动实例化的;
如果想手动来完成绑定和实例化,可以使用bind()和app()助手函数来实现;
class TestTwo
{
public function bind()
{
bind('one', 'app\model\One');
return app('one')->username;
}
}
// bind('one' ,'...')绑定类库标识,这个标识具有唯一性,以便快速调用;
// app('one') 快速调用,并自动实例化对象,标识严格保持一致包括大小写;
自动实例化对象的方式,是采用单例模式实现,如果想重新实例化一个对象,则:
class TestTwo
{
public function bind()
{
bind('one', 'app\model\One');
// 每次调用总是会重新实例化
return app('one',[], true)->username; // app()中第二参数,方法实例化对象的时候,传递参数;
// 模型层通过构造函数来接收数据
// $one = app('one', [['test']], true);
// return $one->username;
}
}
通过 app() 绑定一个类到容器中并自动实例化;
class TestTwo
{
public function bind()
{
return app('app\model\One')->username;
}
}
批量绑定到容器中
public function bind()
{
bind([
'one' => 'app\model\One',
'user' => 'app\model\User'
]); // bind([
// 'one' => \app\model\One::class,
// 'user' => \app\model\User::class
// ]);
// ::class 模式,不需要单引号;
// 而是需要在最前面加上\,之前的加不加都行;
return app('one')->username;
}
系统提供了 provider.php 文件,用于批量绑定类到容器中;
系统内置了很多常用的类库,以便开发者快速调用;
ThinkPHP6.0 容器和依赖注入的更多相关文章
- .Net Core 3.0 内置依赖注入:举例
原文:.Net Core 3.0 内置依赖注入:举例 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...
- IOC容器的依赖注入
1.依赖注入发生的时间 当Spring IoC容器完成了Bean定义资源的定位.载入和解析注册以后,IoC容器中已经管理类Bean定义的相关数据,但是此时IoC容器还没有对所管理的Bean进行依赖注入 ...
- springboot成神之——ioc容器(依赖注入)
springboot成神之--ioc容器(依赖注入) spring的ioc功能 文件目录结构 lang Chinese English GreetingService MyRepository MyC ...
- 通过中看不中用的代码分析Ioc容器,依赖注入....
/** * 通过生产拥有超能力的超人实例 来理解IOC容器 */ //超能力模组接口 interface SuperModuleInterface{ public function activate( ...
- spring框架--IOC容器,依赖注入
思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action 多个 [维护成员变量] service 一个 [不需要维护公共变量] dao 一个 [不需要维护 ...
- AspectCore中的IoC容器和依赖注入
IOC模式和依赖注入是近年来非常流行的一种模式,相信大家都不陌生了,在Asp.Net Core中提供了依赖注入作为内置的基础设施,如果仍不熟悉依赖注入的读者,可以看看由我们翻译的Asp.Net Cor ...
- 从celery rabbitmq with docker-compose 引出对容器、依赖注入、TDD的感悟
用docker配置项目管理系统taiga的时候,不是我一个人遇到这个问题.https://github.com/douglasmiranda/docker-taiga/issues/5 问题描述: 用 ...
- ASP.NET Core 1.0基础之依赖注入
来源https://docs.asp.net/en/latest/fundamentals/dependency-injection.html ASP.NET Core 1.0在设计上原生就支持和 ...
- Spring源码解析三:IOC容器的依赖注入
一般情况下,依赖注入的过程是发生在用户第一次向容器索要Bean是触发的,而触发依赖注入的地方就是BeanFactory的getBean方法. 这里以DefaultListableBeanFactory ...
随机推荐
- Spring Boot JPA的查询语句
文章目录 准备工作 Containing, Contains, IsContaining 和 Like StartsWith EndsWith 大小写不敏感 Not @Query Spring Boo ...
- Json & pickle 数据序列化
前提: 文本文件中只能写入字符串或ascii码格式的内容. info={'name':'zoe','age':18} f=open('test.txt','w') f.write(info) #在文本 ...
- 15个Nodejs应用场景
15个Nodejs应用场景 我们已经对Nodejs有了初步的了解,接下来看看Nodejs的应用场景. 2.1 Web开发:Express + EJS + Mongoose/MySQL express ...
- 02-线性结构3 Reversing Linked List
02-线性结构3 Reversing Linked List (25分) 时间限制:400ms 内存限制:64MB 代码长度限制:16kB 判题程序:系统默认 作者:陈越 单位:浙江大学 http ...
- python(while 循环语句)
一.循环语句 1.while 循环 当我们在 python 中需要重复执行一些动作的时候,这时我们就要用到循环 while 循环的结构,当条件成立的时候,就会执行里面的代码 while 循环不断的运行 ...
- javascript阻止子元素继承父元素事件
$('.box').on('click', function (e) { if(e.target == this) { console.log(e.target) } })
- centos8-django项目部署 nginx+uwsgi
1.虚拟环境virtualenv安装 1.安装virtualenv pip3 install virtualenv 2.创建目录,把项目文件传过来 mkdir My cd My 3.创建独立运行环境- ...
- Java——Spring常用jar包功能详解
很多小伙伴包括我自己,在使用spring的时候导入了一堆jar包,但是并不明白每个jar的用途,使用spring的不同功能时也不知该导入哪个jar包,今天记录一下spring各个jar包的含义,供大家 ...
- ModuleNotFoundError: No module named 'pip'的解决方案
python在通过cmd安装pandas时遇到ModuleNotFoundError: No module named 'pip'的报错. 网上查询后通过如下两行cmd命令解决了 python -m ...
- ASR6505带MCU STM8L+SX1262内核LoRa芯片
LoRa是Semtech公司采用和推广的一种基于扩频技术的超远距离无线传输方案.一种简单的能实现远距离.长电池寿命.大容量的系统,进而扩展传感网络,LoRaWAN,LinkWAN,MESH组网,自组网 ...