簡單易懂的說下php ioc控制反轉 di容器

2021-10-18 11:22:10 字數 2152 閱讀 5468

di容器就是指當你需要乙個資源的時候直接找容器要,容器接管了主導權,這也就是相對平常我們需要正向去主動new乙個物件,現在就是被di容器「反轉控制」了,我們只能去求這它要,從而被動接受了,其中我需要的物件也要好資源也罷,它們的依賴關係咱都別管容器來搞定,這就是ioc和di。

我們來看幾個例子

原始的

class

phone

public

function

act()}

class

usb}

$phone

=new

phone()

;$phone

->

act(

);

這裡是在類裡面去new的,也就是主動去要的,我們接下來要剝奪它的權利,不給它new,看下面**

class

phone

public

function

act()}

class

usb}

$usb

=new

usb;

$phone

=new

phone

($usb);

$phone

->

act(

);

但是覺得這個好像只是變成了傳參而已,對就是這個思想,但是不夠優雅,沒有用到容器

class

phone

public

function

act()}

class

usb}

class

container

public

function

make

($class)}

$container

=new

container

;$container

->

bind

('usb'

,function()

);$phone

=new

phone

($container

->

make

('usb'))

;$phone

->

act(

);

但是我們的phone還是new出來的,這樣也不太優雅,接著改造加入反射,嗷嗷嗷~~~

class

phone

public

function

act()}

class

usb}

class

container;}

else

}public

function

make

($class

)else

return

$new()

;}public

function

ref(

$class

,$params=[

])else

else

}return

$ref

->

newinstanceargs

($dependencies);

}}else

}return

null;}

}$container

=new

container

;$container

->

bind

('usb'

,function()

);$container

->

bind

('phone'

,'phone');

$phone

=$container

->

make

('phone');

$phone

->

act(

);

這樣全程只有在容器裡有new了,**用了new**就有主導權了,等於權利拿到手了,當然還有閉包函式裡有new,其實後面將這些類全部做乙個介面類的繼承,引用型別全部換成介面型別就更優雅了,面對介面程式設計。希望以上可以幫到大家,嗷嗷嗷~~~

簡單易懂的udp

udp 是一種簡單傳輸協議,實現簡單,占用系統資源少 客戶端服務端 coding utf 8 import time from socket import 建立簡單的udp服務端 建立套接字 soc socket af inet,sock dgram 設定本地位址 local addr 50000 ...

簡單易懂的BFS

bfs從起點開始,優先搜尋離起點最近的點,然後由這個最近的點擴充套件其他稍近的點,這樣一層一層的擴充套件,就像水波擴散一樣。bfs需要借助佇列來實現 初始的時候把起始點放入佇列中,並標記起點訪問 如果佇列不為空,從佇列中取出乙個元素x,否則演算法結束 訪問和x相連的所有點v,如果v沒有被訪問,把v入...

簡單說下docker的pull 和 push

pull 映象的元資訊與映象層資料分開儲存,當 pull 乙個映象時,先進行認證獲取到 token 並授權通過,然後獲取映象的 manifest 檔案,進行 signature 校驗。校驗完成後,依據 manifest 裡的層資訊併發拉 取各層。其中 manifest 包含的資訊有 倉庫名稱 tag...