這篇文章為大家帶來了關於PHP的相關知識,其中主要介紹了關於依賴注入的相關問題,依賴注入DI 其實本質上是指對類別的依賴透過建構器完成自動注入,下面一起來看一下,希望對大家有幫助。
(推薦教學:PHP影片教學)
什麼是DI / 依賴注入
依賴注入DI其實本質上是指對類的依賴透過構造器完成自動注入
通俗來說,就是你目前操作一個類,但是這個類的某些方法或者功能不是單單只靠這個類就能完成的,而是要藉助另一個類別的才能完成的
最直接的標誌就是傳參資料為物件的時候。嚴格來說,你想在一個類別中操作另一個類,這兩個類別之間形成了相互依賴關係,傳參的方式叫做注入
依賴注入出現的原因
在未使用依賴注入的時候,php 需要在一個類別中使用另一個類別的時候,往往都會進行如下操作
#例如我在container 類別中需要用到adapter 類,就需要在使用之前進行實例化
如果需要用到大量的外部類,這就會造成了耦合度太高,很容易造成後期的維護困難
通俗的來講,也就是container 脫離不了外部類別去工作,這就叫耦合度太高
<?php class container { private $adapter; public function __construct() { $this->adapter = new adapter(); } }
簡單的依賴注入
上面的程式碼耦合度太高,導致了依賴注入的出現,主要是為了解耦合
如下案例,我們只需要將所需要操作的類別對象傳入即可
依賴注入操作的參數是對象,而不是普通參數,是不是有更好的理解了
但是這樣的簡單依賴注入,會造成如果你依賴的類別很多,你傳參的時候會很長,容易混亂
<?php class container { private $adapter; public function __construct(adapter $adapter) { $this->adapter = $adapter; } }
高階的依賴注入
為了解決上面參數混亂的問題,這時候,依賴注入進行了優化
透過魔術方法,__get 去設定物件
這時候,我們就可以解決依賴太多,參數混亂的問題了
<?php class container { public $instance = []; public function __set($name, $value) { $this->instance[$name] = $value; } } $container = new container(); $container->adapter = new adapter(); $container->autofelix = new autofelix();
依賴注入的應用
我們先定義一個容器類,主要用來向容器中註入你想要操作的類
使用的時候,只需要傳容器這一個物件即可
<?php class container { public $instance = []; public function __set($name, $value) { $this->instance[$name] = $value; } } class adapter { public $name = '我是调度器'; } $container = new container(); $container->adapter = new adapter(); class autofelix { private $container; public function __construct(container $container) { $this->container = $container; } public function who($class) { return $this->container->instance[$class]->name; } } $autofelix = new autofelix($container); $who = $autofelix->who('adapter'); var_dump($who); //我是调度器
依賴注入高階優化
在上面的應用程式中,我們直接將實例化後的物件注入容器中
這樣會導致,所有的物件還沒被使用就會被實例化一遍,造成資源的損耗
我們可以傳入閉包,這樣物件就不會被實例化而注入,當你自己需要使用的時候,再去實例化,就可以減少伺服器資源的損耗了
<?php $container = new container(); $container->adapter = new adapter(); //高阶优化 $container = new container(); $container->adapter = function () { return new adapter(); };
(推薦教學:PHP影片教學)
以上是簡單搞懂PHP中的DI依賴注入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文比較了酸和基本數據庫模型,詳細介紹了它們的特徵和適當的用例。酸優先確定數據完整性和一致性,適合財務和電子商務應用程序,而基礎則側重於可用性和

本文討論了確保PHP文件上傳的確保,以防止諸如代碼注入之類的漏洞。它專注於文件類型驗證,安全存儲和錯誤處理以增強應用程序安全性。

本文討論了在PHP中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。