当前位置:Gxlcms > PHP教程 > 谁能给我解释一下YII2的依赖注入...

谁能给我解释一下YII2的依赖注入...

时间:2021-07-01 10:21:17 帮助过:17人阅读

已经看过一片文章了:http://www.yiichina.com/tutorial/112 ,但是没看懂,谁能稍微通俗一点介绍一下...十分感谢,么么哒

回复内容:

已经看过一片文章了:http://www.yiichina.com/tutorial/112 ,但是没看懂,谁能稍微通俗一点介绍一下...十分感谢,么么哒

转自ThinkPHP:
依赖注入是一种解耦组件之间依赖关系的设计模式,可以用来取代全局变量.

class Factory {
    public static function getDb(){
        include "./Lib/Db.php";
        return new Db("localhost","root","123456","test");
    }
}
class example {
    private $_db;
    function getList(){
        $this->_db->query("...");
    }
    //从外部注入db连接
    function setDb($connection){
        $this->_db = $connection;
    }
}
$example = new example(); //example类依赖数据库
$example->setDb(Factory::getDb()); //注入数据库连接(依赖注入)
$example->getList(); //访问数据库,读取数据

这样一来,example类完全与外部类解除耦合了.
通过从外部调用example类的setDb方法,将连接实例直接注入进去,这样example类完全不用关心数据库连接怎么生成的了.这就叫依赖注入,实现不是在代码内部创建依赖关系,而是让其作为一个参数传递,使得程序更容易维护,降低代码的耦合度.
创建被调用者(Db类)的工作不再由调用者(example类)来完成,因此称为控制反转.
创建被调用者的工作由Factory类来完成,然后注入调用者(传参),因此也称为依赖注入.

可以参考phalcon框架的文档,里面介绍了依赖注入的部分,非常通俗易懂。

public static function getDb()
{
        return Yii::$app->db;
}

这不就是么?

注入显然是从外部注入, 而不是内部定义。

人气教程排行