-
php教程之ThinkPHP6.0 容器和依赖注入
本站最新发布 C#从入门到精通
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
分为如下两部分:
- 依赖注入
- 容器
-
依赖注入
-
依赖注入其实本质上是指对类的依赖通过构造器完成自动注入;
-
在控制器架构方法和操作和方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于访问控制器的参数都来自于 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 文件,用于批量绑定类到容器中;
-
系统内置了很多常用的类库,以便开发者快速调用;
-
最新更新
linux常用指令和一些选项的汇总
centos7下安装mysql6初始化安装密码
ubuntu之命令相关问题
文件系统格式化和挂载
关于Linux下内存和Swap
phpize安装php扩展(本文章以php7扩展mbstr
对FileStream的几种属性和方法认识
[原创][开源] SunnyUI.Net 字体图标
C# BinaryWriter BinaryReader demo
后台读取Html文件节点信息写入到新的ht
php安装扩展时报错:make: *** [mbstring.lo]
php多版本:已存在php5场景下,编译安装
编译安装apache2.2对应的mod_proxy_fcgi.so模块
linux修改环境变量分析
[apue] epoll 的一些不为人所注意的特性
树莓派使用 OLED 屏显示图片及文字
容器技术之Dockerfile(三)
【原创】Linux中断子系统(二)-通用框架
C# 在Word中添加Latex 数学公式和符号
inncheck命令 – 检查语法
access数据库远程连接
java web操作Access数据库
数据库学习总结(1)
二级Access数据库大纲知识要点
链接表的意义
《社工服务管理系统》Access开发心得
让ADO.NET Entity Framework 支持ACCESS数据库
C#连接Access
数据库实验系列之3存储过程和触发器实验
Excel 数据导入至Sqlserver 数据库中 ltrim()