php - 谁能给我解释一下YII2的依赖注入...
阿神
阿神 2017-04-10 15:51:32
[PHP讨论组]

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

阿神
阿神

闭关修行中......

全部回复(3)
阿神

转自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;
}

这不就是么?

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号