下面對thinkphp6與laravel7的容器做一個比較,
首先理解下三個概念:
IOC(控制反轉)、DI(依賴注入)、IOC容器
IOC:簡單來講,就是對類的新建、管理交由他人去處理,省去了new Class的步驟,
DI:IOC的實作方式,逐層搜索類的依賴,并實體化,是一種遞回的思想,
IOC容器:存盤DI處理過后的實體化物件,
用生活的例子去描述:制作一張桌子,
如果我需要張桌子去寫作業,在沒有機器加持情況下,只能自己動手去制作,
首先我需要木材,找到木材后,我需要釘子,找到釘子后,我總得有錘子吧,使用這些材料與工具,我制作一張漂亮的桌子,但是耗時又費力,
現在來了個新鄰居,他是專業的木匠,我現在只需要任務交給他,他幫我實作所有的制作流程,剛好他家又大又寬,能把制作的東西暫存,
我需要的時候才拿出來用,不需要就放那擱著,要是我想要個新桌子,就叫他幫忙重新做個,
類似于委托,隱藏了后面的復雜實作,減少了我的作業量,
以上就是容器的整個思想,
下面看一下thinkphp6&laravel7是如何去實作這種思想的,
再來理解下psr11,這個是fig組織設定的容器介面規范,目前的大部分框架有比較好的支持,
它約定了兩個方法,一個get($id) -- 從容器中獲取實體化的物件,一個has($id) -- 檢查是否存在于容器,另外約定了出錯,拋出的exception的種類,
不同的框架去實作了這個介面,但大家同讀九年義務教育,卻養育了不同性格的人,雖然大家都學習了相同的知識,但實際是兩個不相干的人,
thinkphp6與laravel7的容器本質是一樣,但設計有些不一樣,
兩個框架的核心是:將需要實作的類首先系結到容器,系結不意味著就幫你實體化了(類似登記,不干活),當你取的時候再幫你實體(賴人),容器還比較精明(給了你兩個選擇,1、客官留一份存根,下次無需等待,一鍵領取;2、要是下次還幫你新作個,要花點時間等等,但每次都是新鮮出爐),最后還給個完美的售后(告訴某個你想告訴的人,我拿了),
核心三個方法:bind、make、call,不同框架名字不一定一樣,
論述完基本的原理,我們深入看下thinkphp6&laravel7的模樣和代碼實作,


盡量少貼代碼,要不得講很久,
先講一下兩者的功能的區別:
thinkphp6優勢:無,
laravel7優勢:背景關系系結(特別適合引數的型別是介面,但系結到不同的實作類),可變數量的引數系結(一次系結多個類),擴展系結(適合于實體化后,再次裝飾)
下面主要分析laravel7的代碼,thinkphp6的代碼比較直觀,可讀性比較強,就一個Container類,laravel有好多個類,給我的感覺是,laravel是thinkphp的超集,
未完待續
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/6580.html
標籤:PHP
上一篇:Redis集群搭建的三種方式
