2012-04-13 82 views
2

我想了解如何使用DI容器。在PHP中手動創建/使用DI容器?

比方說,我有三類:A,B,和C像這樣定義的:

class A {} 

class B 
{ 
    private $a; 

    public function set_a(A $a) 
    { 
     $this->a = $a; 
    } 
} 

class C 
{ 
    private $b; 

    public function set_b(B $b) 
    { 
     $this->b = $b; 
    } 
} 

現在我真的不明白,就是我應該在index.php來寫。我讀過實例化一個Container並不是一件好事,然後將它傳遞給我的對象,以便它們可以使用它,因爲它使我的對象依賴於容器。但這是否意味着,我必須在index.php中寫這樣的內容:

$container = new Container(); 
$container->a = function($ctnr) { 
    return new A(); 
} 
$container->b = function($ctnr) { 
    $b = new B(); 
    $b->set_a($ctnr->a); 
    return $b; 
} 
$container->b = function($ctnr) { 
    $c = new C(); 
    $c->set_b($ctnr->b); 
    return $c; 
} 

$c = $container->c; 

這是要走的路嗎?

回答

0

我想你理解了這個概念。

依賴注入的基本思想是將一個對象的實例化委託給一個框架。

您可以編寫自己的容器,但我建議您使用框架。

大多數框架允許您決定應注入哪些類型和位置。

Symfony是一個很不錯的容器。

0

有關容器的整個想法是解析依賴關係並執行對象的初始化。

我會做: 選擇你的容器。爲了好玩,我寫了一篇文章,這篇文章正在幾個應用中使用。 (https://github.com/niclaslindberg/webx-ioc/)。 用接口設計你的依賴關係。 (只允許類依賴於其他接口)。註冊你的類/實例,讓容器完成所有骯髒的工作。