简单的说,一个类内部需要用到另一个类,这就是依赖。比如一个用户模型UserModel,获取所有用户的方法是getAllUser(),一般都是通过调用DB类来实现的,它内部可能是这样子:return new DB()->query("select * ...")。这时我们就说UserModel是依赖于DB的,它们之间存在依赖关系。
上边的代码就是没用到依赖注入,若要用上,一般可使用set的方式或构造时候注入。比如在UserModel内部放一个属性db存储DB的实例,并为DB定义一个接口DBInterface,并在UserModel的构造中要求传入一个DBInterface的实例赎给db属性。这样getAllUser()就可能是这样return $this->db->query("select *...")。
这样做有什么好处?比如换了数据库,只需要新建一个DB2类实现DBInterface,注入的时候注入DB2的实例即可,UserModel内部的代码是不需要动的。若是原来的方式,UserModel内部多处都是直接new DB(),就得一一找出来改为new DB2(),很麻烦。
这里也是很好的参考:http://www.digpage.com/di.html