您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
依赖注入与容器
发布时间:2021-04-05 17:50:47编辑:雪饮阅读()
依赖注入
这里来实现一个汽车跑起来的模拟
<?php
class LunTai{
function roll(){
echo "轮胎在滚动<br/>";
}
}
class BMW{
function run(){
$luntai=new LunTai();
$luntai->roll();
echo "开着宝马吃烤串<br/>";
}
}
$bmw=new BMW();
$bmw->run();
?>
代码很简单,但是这样好吗?不好,因为这里车与轮胎耦合太紧密了。
那么什么叫做依赖注入呢?下面这样就叫做依赖注入。
<?php
class LunTai{
function roll(){
echo "轮胎在滚动<br/>";
}
}
class BMW{
protected $luntai;
function __construct($luntai){
$this->luntai=$luntai;
}
function run(){
$this->luntai->roll();
echo "开着宝马吃烤串<br/>";
}
}
$luntai=new LunTai();
$bmw=new BMW($luntai);
$bmw->run();
?>
那么总结下依赖注入,就是字面意思咯,注入的什么对象我就直接用什么对象,不需要内部自己new。
容器
容器也是一个类,而容器类可以一些其它类都绑定在改容器类中,然后容器类提供一个对外的make方法,当外部需要用到某个类的之后直接make就行了,不用的时候也就不会自动实例化某个类的对象的,这样就实现了懒加载。那么这里来看看上面的车轮与轮胎的业务场景在容器中是如何实现的。
<?php
class LunTai{
function roll(){
echo "轮胎在滚动<br/>";
}
}
class BMW{
protected $luntai;
function __construct($luntai){
$this->luntai=$luntai;
}
function run(){
$this->luntai->roll();
echo "开着宝马吃烤串<br/>";
}
}
class Container{
//用于存放所绑定类的变量
static $register=[];
//用于绑定类的函数
//Closure:匿名函数的类型
static function bind($name,Closure $col){
self::$register[$name]=$col;
}
//创建对象函数
static function make($name){
$col=self::$register[$name];
return $col();
}
}
Container::bind('luntai',function(){
return new LunTai();
});
Container::bind('bmw',function(){
return new BMW(Container::make('luntai'));
});
$bmw=Container::make('bmw');
$bmw->run();
?>
关键字词:php,依赖注入,容器
上一篇:php的门面设计模式
下一篇:c语言-define与常量