千家信息网

PHP依赖注入容器的实例讲解

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"PHP依赖注入容器的实例讲解"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!依赖注入容
千家信息网最后更新 2026年11月03日PHP依赖注入容器的实例讲解

本篇内容介绍了"PHP依赖注入容器的实例讲解"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

依赖注入容器理解

耦合

一个好的代码结构设计一定是松耦合的,这也是很多通用设计模式的宗旨,就是把分散在各处的同一个功能的代码汇聚到一起,形成一个模块,然后在不同模块之间通过一些细小的、明确的渠道进行沟通。

在实践中,不同功能和模块之间的互相依赖是不可避免的,而如何处理好这些依赖之间的关系则是代码结构能否变得美好的关键。

sendEmail('register', $user);    }} class Notify{    public function sendEmail($type, $data)    {        switch $type {            case 'register':                // 发送注册确认邮件                $email = new Email($type);                $email->send($data);            ...        }    }} class Email{    public function send($data)    {        // 发送邮件    }}

上述代码中,三个类之间逐层依赖,三个类实例化的顺序是 User -> Notify -> Email

也就是说我先实例化User类,可能执行了一些代码之后再去实例化我需要的其他类,比如Notify,以此类推。

这种依赖会让我们不得不为了得到需要的依赖而去做的一些准备工作,有时候可能一个new操作还不够。而这部分工作就是所说的耦合,他会让一个独立功能的类不得不去关心一些和自己的主体功能没什么关系的操作。

解除一个类对其他类的依赖

要解决这个问题也很简单,我可以先实例化好Email类,然后再实例化Notify,然后把Email对象作为参数传给Notify,最后实例化User类,然后把Notify传进去。这就是所谓的依赖注入,可以看到这个过程中类实例化的顺序完全反过来了,先实例化被依赖的对象,而不是先实例化最终需要的对象,这是控制反转。

代码如下:

可以通过构造函数来注入需要的依赖,也可以用一些其他的方法。

用容器托管依赖

那又有新的问题,例子中只有三个类还好,那如果这个User类依赖Notify来发邮件,依赖Model来存数据库,依赖redis来缓存,这样固然把依赖关系转移到了类的外部,但还是会导致我只想实例化一下User的时候,却要手动做很多的准备工作,会让代码混乱。所以这个时候需要一个容器。而这个容器的作用就是替我来管理这些依赖。

values[$offset]($this);    }     public function offsetSet($offset, $value)     {        $this->values[$offset] = $value;    }}

在程序启动的时候,我们可以在一个地方统一的注册好一系列的基础服务。

就会变成这样

sendEmail('register', $user);    }} class Notify{    public function sendEmail($type, $data)    {        switch $type {            case 'register':                // 发送注册确认邮件                $email = $container['email'];                $email->send($data);            ...        }    }} class Email{    public function send($data)    {        // 发送邮件    }}

就是当User需要Notify的时候,会去向容器要这个类的对象,那至于Notify再依赖什么其他的东西,我就不用管了,因为Notify也会去向容器要它自己需要的依赖。所有这些依赖关系的处理就完全托管给容器了,我们既不需要去关心依赖之间的层次关系,也避免了依赖之间的耦合。

需要注意的是,依赖注入容器一般只接受一个匿名函数,而不是一个实例化好的对象,匿名函数会告诉容器怎样去获得一个对象,这样可以使得一个服务在被需要的时候才会去实例化

"PHP依赖注入容器的实例讲解"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

实例 容器 代码 之间 对象 就是 时候 邮件 功能 耦合 三个 函数 模块 工作 不同 内容 去向 更多 知识 结构 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技资迅 互联网 科技 碳银互联网科技有限公司 互联网高科技股票 互联网金融和金融科技 科技类的互联网平台 深圳国际航运科技和互联网 字节跳动和互联网科技 上海宁丞科技互联网 湖北码尼互联网科技有限公司电话 荆州市昕露互联网络科技有限公司 恒生互联网科技指数跳水 哈尔滨屹滨互联网科技有限公司 深圳育鹏互联网科技有限公司招聘 青海科技产业互联网发展 浙南科技城互联网大厦建设工程 21世纪互联网科技成就 同城互联网络科技 重庆科技产业互联网有哪些 六子台科技互联网展会 江苏根荣互联网科技 腾讯阿里互联网科技 海南科技产业互联网平台 创业天下互联网科技有限公司 互联网科技项目计划书材料类 厦门比较好的科技互联网公司 恒生互联网科技业指数调整周期 云南互联网科技学费 恒生科技指数 中概互联网 科技发展第三阶段互联网时代
0