下面列子gundong方法和kaochuan方法紧密结合,偶合度高,不利于扩展和维护。程序设计需要降低偶合度,增加可扩展性。
<?php
class Luntai
{
public function gundong()
{
echo '我是gundong方法';
}
}
class Baoma
{
public function kaochuan()
{
$luntai = new Luntai();
$luntai->gundong();
echo '我是kaochuan方法';
}
}
$baoma = new Baoma();
$baoma->kaochuan();
使用依赖注入优化后的写法
<?php
class Luntai
{
public function gundong()
{
echo '我是gundong方法';
}
}
class Baoma
{
public luntai;
public __constract($luntai)
{
$this->luntai = $luntai;
}
public function kaochuan()
{
$this->luntai->gundong();
echo '我是kaochuan方法';
}
}
$luntai = new Luntai();
$baoma = new Baoma($luntai);
$baoma->kaochuan();
使用容器优化后写法
<?php
class Container
{
static $register = [];
public function bind($name,closure $col)
{
self::$register[$name] = $col;
}
public function make($name)
{
$col = self::$register [$name];
return $col();
}
}
class Luntai
{
public function gundong()
{
echo '我是gundong方法';
}
}
class Baoma
{
public luntai;
public __constract($luntai)
{
$this->luntai = $luntai;
}
public function kaochuan()
{
$this->luntai->gundong();
echo '我是kaochuan方法';
}
}
Container::bind('luntai',function(){
return new Luntai();
});
Container::bind('baoma',function(){
return new Baoma(Container::make('luntai'));
});
$baoma = Container::make('baoma');
$baoma->run();
依赖注入,容器的优点
- 降低类之间偶合度
- 实现惰性加载
- 方便管理