老大說了這個dotenv的重構比較適合用來學習,進行了分析,並分享了出來php
github項目地址: github.com/vlucas/phpd…git
dotenv是一個php寫的從文件中加載環境變量的庫,庫自己文件數量較少,比較容易閱讀。github
2.x實例化方式設計模式
$dotenv = new Dotenv\Dotenv(__DIR__, 'myconfig');
$dotenv->load();
複製代碼
3.x實例化方式api
$dotenv = Dotenv\Dotenv::create(__DIR__, 'myconfig');
$dotenv->load();
複製代碼
這個3.x版本create方法建立對象使用的是工廠方法設計模式數組
核心實例化dotenv對象由手動調用構造方法重構成了靜態工廠方法,這個改變是由於這個dotenv加載.env文件須要判斷env文件、envFactory對象是否傳遞,而這個判斷是個if else的邏輯,根據構造方法不宜寫邏輯定理,若是不使用靜態工廠方法進行重構,那麼在new DotEnv以前,必須手動判斷.env是否存在。在屢次實例化這個Dotenv對象時,必然形成代碼重複。工具
經過工廠方法封裝建立對象的邏輯,以免建立對象的代碼重複,是很是常見的一種設計模式的最佳實踐學習
異常3.x比2.x多了InvalidCallbackExceptionspa
3.x比2.x重要的改變是多了Adapter目錄,這個是由於2.x僅支持將.env使用putenv加載到環境變量中,而3.x支持將.env加載到多個環境變量中,包括設計
在使用時就能無差異對待了,這樣無需調用時候的if else判斷了
接口可替換設計
這些接口都是可替換的,這種面向接口的設計方式使得代碼很是容易擴展