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

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

Sep 23, 2019 pm 01:14 PM
php 依存性注入

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

See all articles