知識點目錄:
????????1.單例設(shè)計模式
? ? ? ? 2.注冊樹模式
? ? ? ? 3.依賴注入(DI)
? ? ? ? 4.php反射機制
? ? ? ? 5.自定義容器類(上述4者融合)
? ? ? ? 6.分析tp5.1的容器類
1.單例設(shè)計模式:
? ? ? ? 目的:在整個項目中,一個類只有一個實例
? ? ? ? 一個懶漢式的單例設(shè)計模式(爛大街了由蘑,還是截個圖放上去吧)
2.?注冊樹模式:
? ? ? ? 注冊樹模式通過將對象實例注冊到一顆全局的樹上
? ? ? ? 需要的時候從對象樹上摘下來使用? (最簡單版闽寡,后期細(xì)說)
3.依賴注入
????????依賴注入只要用來減少代碼間的耦合
????????有效分離對象和它所需的外部資源? ? ? ??
4.php的反射機制:
????????通俗說法:根據(jù)一個對象,知道它所屬的類尼酿,擁有哪些方法爷狈,屬性,注釋等
? ??????在PHP中裳擎,反射是指在PHP運行狀態(tài)中涎永,擴展分析PHP程序,導(dǎo)出或者提取出關(guān)于類鹿响、屬性羡微、方法、參數(shù)等的詳細(xì)信息惶我,包括注釋拷淘。這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能,被稱為反射API指孤。
5.自定義容器類:
? ? ? ? 如下圖所示,我們將car類注入到person類中,通過person類的buy方法調(diào)用car類的pay方法
? ? ? ? 我們的person類與car類
? ? ? ? 大頭的 Container類
? ? ? ? 這里需要注意容器類的get方法(通過反射機制拿到類的構(gòu)造函數(shù)恃轩,注入所需參數(shù))
6.?分析tp5.1的容器類:
? ? ? ? 這里居然需要到thinkphp目錄下執(zhí)行g(shù)it?checkout 5.1结洼,否則Contaier.php不出現(xiàn)(我也是醉了)
? ? ? ? 如下圖所示,Container類實現(xiàn)了ArrayAccess接口(php內(nèi)置接口:可以讓對象像數(shù)組一樣用中括號調(diào)用)叉跛,IteratorAggregate(聚合式迭代器)松忍,Countable(php內(nèi)置接口:繼承Countable接口的可被用于count() 函數(shù),就是可以這樣寫count($class))筷厘,以及反射類等
? ? ? ? 下圖為tp框架容器類源碼(ps:跟明哥上面的demo差不多)
? ? ? ? 從tp框架入口文件開始分析:
? ? ? ? 詳情請看明哥的源碼注釋鸣峭。。
? ? ? ? 最后的總結(jié)圖:
? ? ? ? 實際上這三者最后打印的內(nèi)容都是等價的