使用php中依賴注入控制器的方法
在php中,依賴注入將是很重要的一個(gè)概念。我們可以通過(guò)容器,注入實(shí)例,也可以輕松地在任何地方使用依賴注入。 在實(shí)際應(yīng)用開(kāi)發(fā)中,依賴單獨(dú)使用確實(shí)不是太常見(jiàn)。 但對(duì)于開(kāi)發(fā)大型應(yīng)用程序來(lái)說(shuō),依賴注入是非常重要的。
在大規(guī)模應(yīng)用開(kāi)發(fā)中,通常采用Ioc容器來(lái)管理大量依賴項(xiàng)。 簡(jiǎn)便地說(shuō),Ioc容器生成并管理對(duì)象,并在所需時(shí)注入這些對(duì)象的依賴關(guān)系。Ioc的全稱是“Inversion of Control”,即“控制反轉(zhuǎn)”,是指依賴關(guān)系的控制不再由調(diào)用方控制,而是故意從外部控制。 后者是IOC控制。
舉個(gè)例子:通常在實(shí)現(xiàn)類和方法時(shí),我們都需要從自己負(fù)責(zé)您必須準(zhǔn)備要實(shí)現(xiàn)的所有依賴關(guān)系。 這種方法是按照這種順序執(zhí)行的:
$logger = new FileLogger(); $renderer = new JsonRenderer(); $controller = new UserController($logger, $renderer);
但如果在一個(gè)大型應(yīng)用程序中有數(shù)百個(gè)類,每個(gè)類都有多個(gè)依賴項(xiàng),那么將會(huì)有大量的依賴項(xiàng)需要您設(shè)置。 這只會(huì)使代碼行數(shù)和可讀性變得更差。 這就是我們引入Ioc的原因。
Ioc容器機(jī)制:在Ioc容器中,我們僅需要添加構(gòu)造函數(shù)而不必顯式調(diào)用所有已知依賴關(guān)系。
class UserController { private $logger; private $renderer; public function __construct(FileLogger $logger, JsonRenderer $renderer) { $this->logger = $logger; $this->renderer = $renderer; } } // and instead of the previous code we can simply do this: $container = new Container(); $controller = $container->get(UserController::class);
可以看到,我們不再定義依賴關(guān)系,而只是從我們的容器中獲取它們。 這使得代碼更加優(yōu)雅、可讀,并減少了代碼行數(shù)。
Ioc優(yōu)點(diǎn):Ioc模式使代碼更清晰,減少了代碼副本和代碼修改所需的時(shí)間和努力。 替代依賴項(xiàng)的創(chuàng)建和注入方式是Ioc容器,這使得代碼更加模塊化和可測(cè)試。
總之,在大型應(yīng)用程序中使用Ioc容器來(lái)管理依賴關(guān)系是完全有道理的,并且是一種在實(shí)踐中使用的技術(shù)。