发布于2021-03-14 06:00 阅读(1350) 评论(0) 点赞(2) 收藏(1)
分为如下两部分:
依赖注入
依赖注入其实本质上是指对类的依赖通过构造器完成自动注入;
在控制器架构方法和操作和方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于访问控制器的参数都来自于 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 文件,用于批量绑定类到容器中;
系统内置了很多常用的类库,以便开发者快速调用;
作者:下班了快跑
链接:http://www.phpheidong.com/blog/article/3441/6663cf109f8b8e296c05/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!