当一些简单的开发技巧有一个高大山的名称时 总会给人一种难以接近的感觉,第一次接触依赖注入的时候我也挺蒙蔽的。
当我接触了使用java开发了一段时间后,在回过头来看依赖注入,怎么那么眼熟············只能用醍醐灌顶来形容
使用依赖注入的目地是什么?
答:解耦!解耦!解耦!(重要的事情说三遍)
我只讲一个超级简单的例子
//上学接口
interface GoSchool{
public function go();
}
//公交类
class GoSchoolByBus implements GoSchool{
public function go(){
echo "今天坐公交上学";
}
}
//自行车类
class GoSchoolByBike implements GoSchool{
public function go(){
echo "今天骑车上学";
}
}
function goSchool(GoSchool $go){
$go->go();
}
goSchool(new GoSchoolByBike());
结果是:今天骑自行车上学
看下面的文章之前 可以先去看看手册里的
http://php.net/manual/zh/language.oop5.typehinting.php
没错PHP 支持对象 数组 回调 类型的类型约束
function goSchool(GoSchool $go){
$go->go();
}
以上代码轻松的实现了解耦,更换交通方式只要,更换交通类就可以,无需修改 goSchool方法内部,函数和各个类之前 没有任何关联
比如这个函数使用了GoSchool 接口类型约束,所以传进来的必须是实现了该接口的类(当然你也可以以一个具体的类 作为类型约束)
在java和go 中都有超类的概念,所以go 中interface{}可以I代表任何类型
说了半天 啥是依赖 啥是注入··········
如果看不懂,就先放一放,这种感觉我是深有体会,不能理解那是因为在知识层面,还没积累到一定程度。不能死磕