>  기사  >  백엔드 개발  >  谁能给我解释一下YII2的依赖注入...

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

WBOY
WBOY원래의
2016-06-06 20:30:421031검색

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

回复内容:

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

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

<code>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(); //访问数据库,读取数据
</code>

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

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

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

</code>

这不就是么?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.