參考文章:[https://laravelacademy.org/post/769.html](https://laravelacademy.org/post/769.html)
## DI(依賴注入,是一種設計模式)
只要不是由內部生產(比如初始化、構造函數 \_\_construct 中通過工廠方法、自行手動 new 的),而是由外部以參數或其他形式注入的,都屬于依賴注入(DI) 。是不是豁然開朗?事實上,就是這么簡單。下面就是一個典型的依賴注入:
~~~
// 超能力模組
$superModule = new XPower;
// 初始化一個超人,并注入一個超能力模組依賴
$superMan = new Superman($superModule);
~~~
我們定下了一個接口 (超能力模組的規范、契約),所有被創造的模組必須遵守該規范,才能被生產。
~~~
interface SuperModuleInterface
{
/**
* 超能力激活方法
*
* 任何一個超能力都得有該方法,并擁有一個參數
*@param array $target 針對目標,可以是一個或多個,自己或他人
*/
public function activate(array $target);
}
~~~
遵循接口,創建了下述(模組)類:
~~~
/**
* X-超能量
*/
class XPower implements SuperModuleInterface
{
public function activate(array $target)
{
// 這只是個例子。。具體自行腦補
}
}
/**
* 終極炸彈 (就這么俗)
*/
class UltraBomb implements SuperModuleInterface
{
public function activate(array $target)
{
// 這只是個例子。。具體自行腦補
}
}
~~~
現在,當我們初始化 “超人” 類的時候,提供的模組實例必須是一個 SuperModuleInterface 接口的實現。
~~~
class Superman
{
protected $module;
public function __construct(SuperModuleInterface $module)
{
$this->module = $module;
}
}
~~~
## IOC(控制反轉,是一種思想)
我們不應該手動在 “超人” 類中固化了他的 “超能力” 初始化的行為,而轉由外部負責,由外部創造超能力模組、裝置或者芯片等(我們后面統一稱為 “模組”),植入超人體內的某一個接口,這個接口是一個既定的,只要這個 “模組” 滿足這個接口的裝置都可以被超人所利用,可以提升、增加超人的某一種能力。
> **這種由外部負責其依賴需求的行為,我們可以稱其為 “控制反轉(IoC)。**
- 代碼規范
- 編程規范(psr-1,2)
- 編程規范(原作者的建議)
- JS篇
- 正則校驗
- 檢測密碼強度
- 常用方法
- 頁面下載文件
- 手機類型判斷
- 字符串截取方法
- 全選/全不選
- js 判斷瀏覽器
- JS判斷兩個日期大小
- JS 執行計時器
- 回車提交
- 阻止冒泡
- js每3位用逗號隔開的形式
- JS跟APP端交互
- 常用的工具類
- PHP地理位置計算
- 百度地圖兩點坐標距離計算
- 生成唯一ID
- 身份證驗證類
- 阿拉伯數字轉化為大寫
- 獲取漢字首個拼音
- PHP中文轉拼音
- Rand類庫
- PHP Date()函數詳細參數
- 時間
- PHP每3位用逗號隔開的形式
- Elasticsearch全文搜索引擎
- 全文搜索引擎 Elasticsearch
- 設計模式
- 單例模式
- 依賴注入VS控制反轉
- 工廠模式
- Gitlab
- git常用命令
- PHPStorm關聯gitlab
- Thinkphp5
- 工具類
- 擴展
- think-queue——ThinkPHP隊列擴展
- qr-code——好用的二維碼生成類庫
- ThinkPHP5 社會化登錄組件
- PHP SDK——助力支付寶小程序后端開發
- tp5.0使用predis訪問redis集群
- tp5+swoole
- 網絡知識
- HTTP知識
- 小程序
- 知識推薦