IOC容器

php的依賴注入

傳統的思路是應用程序用到一個A類,就會建立A類並調用A類的方法,假如這個方法內須要一個B類,就會建立B類並調用B類的方法,而這個方法內須要一個C類,就會建立C類,接着作些其它工做。php

 1 <?php
 2 class C
 3 {
 4     public function doSomething()
 5     {
 6         echo __METHOD__, '我是C類|';
 7     }
 8 }
 9 
10 class B
11 {
12     public function doSomething()
13     {
14         $bim = new C();
15         $bim->doSomething();
16         echo __METHOD__, '我是B類|';
17     }
18 }
19 
20 class A
21 {
22     public function doSomething()
23     {
24         $bar = new B();
25         $bar->doSomething();
26         echo __METHOD__, '我是A類|';;
27     }
28 }
29 
30 $class = new A();
31 $class->doSomething(); //C::doSomething我是C類|B::doSomething我是B類|A::doSomething我是A類|

使用依賴注入的思路是應用程序用到A類,A類須要B類,B類須要C類,那麼先建立C類,再建立B類並把C注入,再建立A類,並把B類注入,再調用A方法,A調用B方法,接着作些其它工做。redis

 1 <?php
 2 
 3 class C
 4 {
 5     public function doSomething()
 6     {
 7         echo __METHOD__, '我是C類|';
 8     }
 9 }
10 
11 class B
12 {
13     private $c;
14 
15     public function __construct(C $c)
16     {
17         $this->c = $c;
18     }
19 
20     public function doSomething()
21     {
22         $this->c->doSomething();
23         echo __METHOD__, '我是B類|';
24     }
25 }
26 class A
27 {
28     private $b;
29 
30     public function __construct(B $b)
31     {
32         $this->b = $b;
33     }
34 
35     public function doSomething()
36     {
37         $this->b->doSomething();
38         echo __METHOD__, '我是A類|';;
39     }
40 }
41 
42 $class = new A(new B(new C()));
43 $class->doSomething(); // C::doSomething我是C類|B::doSomething我是B類|A::doSomething我是A類|

這就是控制反轉模式。依賴關係的控制反轉到調用鏈的起點。這樣你能夠徹底控制依賴關係,經過調整不一樣的注入對象,來控制程序的行爲。例如A類用到了memcache,能夠在不修改A類代碼的狀況下,改用redis。this

 

使用依賴注入容器後的思路是應用程序須要到A類,就從容器內取得A類,容器建立C類,再建立B類並把C注入,再建立A類,並把B注入,應用程序調用A方法,A調用B方法,接着作些其它工做.spa

相關文章
相關標籤/搜索