任何你使用的現代框架,均可能嚴重依賴於依賴注入。可是你知道依賴注入表明的真正含義嗎?或者換一個更好的角度 - 你知道依賴注入不是什麼嗎?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等多個知識點高級進階乾貨須要的能夠免費分享給你們,須要的能夠加入個人官方羣點擊此處。