前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP控制反转与依赖注入

PHP控制反转与依赖注入

作者头像
用户8568307
发布2022-03-14 14:57:41
5130
发布2022-03-14 14:57:41
举报
文章被收录于专栏:PHP全栈技术PHP全栈技术
控制反转(Inversion of Control,缩写为IoC)

是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式就是依赖注入(Dependency Injection,简称DI)。 书本上的解释:

  • 模块间的依赖关系从程序内部提到外部来实例化管理称之为控制反转,这个实例化的过程就叫做依赖注入。

其实书本上的解释已经很明了,不明白的继续往下看示例 辅助理解:

  • a 依赖 b,但是 a 不控制 b 的创建与销毁,仅使用 b ,并且 b 的控制权交给 a 之外处理,这就是控制反转。

什么是正转?正转就是我们的一般写法,在类中需要使用什么就直接创建对应的实例,如下。

代码语言:javascript
复制
class c
{
    public function say()
    {
        echo 'hello';
    }
}

/**
 * Class a
 */
class a
{
    private $c;
    public function __construct()
    {
        $this->c = new C(); // 实例化创建C类
    }

    public function sayC()
    {
        echo $this->c->say(); // 调用C类中的方法
    }
}

$a = new a();
$a->sayC();

上面的示例中,a类依赖c类,在a类的构造函数中就实例化了c类,显然这是直接在程序内部实例化的,不符合控制反转。

控制反转示例:

代码语言:javascript
复制
/**
 * Class c
 */
class c
{
    public function say()
    {
        echo 'hello';
    }
}

/**
 * Class a
 */
class a
{
    private $c;
    public function setC(C $c)
    {
        $this->c = $c; // 实例化创建C类
    }

    public function sayC()
    {
        echo $this->c->say(); // 调用C类中的方法
    }
}

$c = new C();
$a = new a();
$a->setC($c);
$a->sayC();

这里的a类同样依赖于c类,但是a类仅有c类的使用权,c类的控制权并不在a类的手中。

换而言之,这里c类的实例化放到了a类的外部,通过调用a类的方法的形式获取到c类的对象,这就是控制反转,而这个过程也就做依赖注入。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP全栈技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 控制反转(Inversion of Control,缩写为IoC)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档