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...