任何你使用的现代框架,均可能严重依赖于依赖注入。可是你知道依赖注入表明的真正含义吗?或者换一个更好的角度 - 你知道依赖注入不是什么吗?node
虽然每一个现代框架都附带依赖容器 — 一个用于构建对象的大盒子 — 但这并不能保证你会按照预期的方式使用依赖注入模式。laravel
容器让依赖项更加容易注入到类中,可是它也可能被滥用。sql
一种滥用服务容器的方式是从容器中拉取对象,而不是注入到当前的上下文中。该模式称之为服务定位器模式,它与依赖注入相反。shell
class MyController { public function indexAction() { $service = app(Service::class); // … } }
服务定位器模式向容器请求特定的对象。这将致使服务从一个难以测试的点拉取,而且,对于外部而言这就像一个黑匣子:除非你查看所有相关代码,不然你将没法了解 MyController 所依赖的外部类型。服务器
一些框架提倡这种用法,由于在项目开始的时候它将变得简单快捷。一旦在容器中注册了成百上千个类,使用服务定位器模式将会致使混乱。而使用依赖注入将解决该问题。架构
更多信息,可查看我写的这篇博客: 为何服务定位器模式是反模式.并发
接下来是一些更积极的方面:以一种更好的方式使用容器。app
当依赖注入被正确使用时,外部上下文 (在许多状况下为容器) 能够控制注入到类中的具体依赖项。 这意味着同一个对象能够被注入到其余几个上下文中,而不须要知道这些上下文是「单例」仍是「依赖共享」。框架
虽然依赖共享是有用且强大的,但它并非依赖注入的真正目的,而只是一个有益的反作用。分布式
最后,另外一个有用的特性,一样不是依赖注入的内容:自动装配。
为了给予开发人员更多的灵活性,一些容器容许智能的、自动的肯定类的定义。这意味着您没必要手动描述应该如何构造每一个类。这些容器将扫描您的代码,并经过查看类型提示和文档块来肯定须要哪些依赖项。
这里发生了不少神奇的事情,可是自动装配对于应用程序的快速开发来讲是一个很是有用的工具。
若是您如今还想重温一下什么是依赖注入的基础知识。你能够去阅读它这里.
更多学习内容请访问:
腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)
以上内容但愿帮助到你们,不少PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提高,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货须要的能够免费分享给你们,须要的能够加入个人官方群点击此处。