ホームページ > バックエンド開発 > PHPの問題 > PHPの依存性注入とは何ですか

PHPの依存性注入とは何ですか

王林
リリース: 2023-02-24 16:48:01
オリジナル
3663 人が閲覧しました

PHPの依存性注入とは何ですか

#はじめに

依存性注入とは何かご存知ですか?依存関係注入 (DI) の概念は奥が深いように思えますが、いくつかの新しい PHP フレームワークを使用したことがある場合は、すべて依存関係注入を使用してクラス間の依存関係を処理するため、DI についてよく理解しておく必要があります。

php で依存関係を渡すための 3 つのオプション

実際、DI を理解するには、まず php で依存関係を渡す方法を理解する必要があります。

最初の解決策であり、最も望ましくない解決策は、次のコードに示すように、クラス A で new キーワードを直接使用してクラス B を作成することです。

<?php
class A
{
  public function __construct()
  {
    $b = new B();
  }
}
ログイン後にコピー

なぜこの解決策なのかそれはお勧めできませんか?この場合、A と B が結合されているため、クラス A はクラス B なしでは動作できないことを意味します。

2 番目のオプションは、クラス A

のメソッドに必要なクラス B を渡すことです。次のコードが表示されます。

<?php
class A
{
  public function __construct(B $b)
  {
  }
}
ログイン後にコピー

This メソッド An最初のソリューションよりも改善された点は、クラス A をクラス B にバンドルする必要がありません。受信クラスがクラス A のニーズを満たす限り、クラス C、クラス D などにすることもできます。ただし、この解決策の欠点は、クラス A が多くのクラスに依存している場合、パラメーターのリストが非常に長くなり、混乱が発生しやすいことです。

3 番目のオプションは、次のコードに示すように、set メソッドを使用して

を渡すことです。

<?php
class A
{
  public function setB(B $b)
  {
    $this->b = $b;
  }
}
ログイン後にコピー

このオプションも存在し、 2 番目のオプション 同じ欠点は、依存クラスの数が増えると、非常に多くの set メソッドが必要になることです。現時点では、これらの依存関係の管理に役立つ特別なクラス (またはコンテナー) があれば素晴らしいだろうと考えていました。

依存性注入の簡単な例

次のコードは twittee からのものです:

<?php
class Container {
 private $s=array();
 function __set($k, $c) { $this->s[$k]=$c; }
 function __get($k) { return $this->s[$k]($this); }
}
ログイン後にコピー

どうすれば A と B の関係を管理できるでしょうか。コンテナ クラスですか? コード内の依存関係について話しましょう:

<?php
class A
{
  private $container;
  public function __construct(Container $container)
  {
    $this->container = $container;
  }
  public function doSomeThing()
  {
    //do something which needs class B
    $b = $this->container->getB();
    //to do
  }
}
ログイン後にコピー

次に、クラス B をコンテナ クラスに注入します:

$c = new Container();
$c->setB(new B());
ログイン後にコピー

また、クラス B がそれを実行しないように、匿名関数を渡すこともできます。は渡されるとすぐにインスタンス化されますが、インスタンス化作業は実際に呼び出されたときにのみ完了します:

$c = new Container();
$c->setB(function (){
  return new B();
});
ログイン後にコピー

これは非常に単純な例にすぎません。実際には、コンテナ クラスについて考慮すべきことがたくさんあります。遅延読み込みなど。

上記の内容は参考用です。

推奨チュートリアル:

PHP ビデオ チュートリアル

以上がPHPの依存性注入とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート