2012-04-13 13 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の中で書くことになっていますものです。コンテナをインスタンス化してオブジェクトに渡すのは良いことではありませんので、オブジェクトをコンテナに依存させるため、コンテナを使用することができます。しかし、私はこのようなものを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/)。 依存関係をインターフェイスで設計する。 (クラスが他のインタフェースに依存することのみ許可する)。クラス/インスタンスを登録し、コンテナにすべての汚い作業をさせます。

関連する問題