DI依赖注入、容器
减少类和类之间联系
容器优点:
1、降低耦合度
2、实现惰性加载
3、便于管理
不使用依赖注入和容器:
class LunTai
{
function roll()
{
echo '轮胎在滚动<br>';
}
}
class BMW
{
function run()
{
$luntai = new LunTai();
$luntai->roll();
echo '开着宝马吃烤串<br>';
}
}
//普通用法
$bmw = new BMW();
$bmw->run();
使用依赖注入:(实例当成参数传递)
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();
使用容器:
class LunTai
{
function roll()
{
echo '轮胎在滚动<br>';
}
}
class BMW
{
protected $luntai;
//注入方式
function __construct()
{
$this->luntai = $luntai;
}
function run()
{
$this->luntai->roll();
echo '开着宝马吃烤串<br>';
}
}
class Containter
{
//存放所绑定的类
static $register = [];
//绑定函数
static function bind($name,Closure $col)
{
self::$register[$name] = $col;
}
//创建对象函数
static function make($name)
{
$col = self::$register[$name];
return $col();
}
}
Containter::bind('luntai', function (){
return new LunTai();
});
Containter::bind('bmw', function (){
return new BMW(Container::make('luntai'));
});
$bmw = Containter::make('bmw');
$bmw->run();