よく見るけどよく理解していない概念、依存性注入 (DI) とコントローラー反転 (Ioc) について、いくつか良い記事を見つけたので共有します。 私の理解では、依存関係の注入とは、コンポーネントがコンストラクター、メソッド、または属性フィールドを通じて対応する依存関係オブジェクトを取得することを意味します。
理解するために実際の例を見てみましょう。例えば、包丁が欲しいです。
1. 新しい包丁に対応して、自分で作ることができます。
2. ファクトリーモデルに対応する包丁を生産している工場から購入できます。
3. 店舗に電話して、商品を自宅まで配達してもらうことができます。これは依存性注入に相当します。
別の例として、私は俳優ですが、あるドラマの男性主人公を演じるよう、ある監督に頼むことはできません。逆に、誰を演じるかは監督が決めることができます。そして私たちの目的はこの俳優です。
インジェクションのいくつかの方法:
1.construct インジェクション
<?phpclass Book { private $db_conn; public function __construct($db_conn) { $this->db_conn = $db_conn; }}
ただし、依存関係が多すぎる場合は、コンストラクターで複数のパラメーターを渡す必要があり、3 つを超えるとコードが読みにくくなります。
2.set注入
<?php $book = new Book(); $book->setdb($db); $book->setprice($price); $book->set_author($author);?>
コードは非常に明確ですが、4番目の依存関係を注入する必要がある場合、別の行を追加することになります。
より良い解決策は、すべての依存関係のコンテナとしてクラスを作成することです。このクラスでは、必要な依存関係を保存、作成、取得、検索できます
現時点では、ブック インスタンスを取得する場合のみです。 $ newone = Ioc::makebook();
を実行する必要があります。上記はコンテナの具体的な例です。 レジストリの登録と取得を使用する方が良いです。次のメソッドを使用して依存関係を登録および注入できます
<?phpclass Ioc { protected $db_conn; public static function make_book() { $new_book = new Book(); $new_book->set_db(self::$db_conn); //... //... //其他的依赖注入 return $new_book; }}
http://net.tutsplus.com/tutorials/php/dependency-injection-huh
http://scriptogr.am/mattsah/post/dependency -in-php
http://martinfowler.com/articles/injection.html
http://www.potstuck.com/2009/01/08/php-dependency-injection/
http://www .potstuck.com/ 2010/09/09/php-dependency-a-php-dependency-injection-framework/
http://www.cnblogs.com/Seekr/archive/2012/06/20/2556463.html