PHP 依存性注入 (DI) と制御反転 (IoC) に関する実践的なチュートリアルを共有します。
この記事では、PHP の依存性注入 (DI) と制御の反転 (IoC) に関する関連情報を主に紹介します。興味のある方は参考にしてください。
まず、依存性の注入と制御の反転について説明します。これも同じで、プログラム間の結合を減らすために使用されるデザイン パターンです。少し調べてみたところ、TP の公式 Web サイトに関連する記事がなかったので、これを紹介するためにこのささやかな記事を書きました。デザインパターンを見て、TP コミュニティに何か貢献できればと思っています。
まず第一に、このデザインパターンの定義を追求しないでください。そうしないと、著者はこれに深く影響を受けており、そのすべてが説明されています。理論的な観点から見ると、Java コードで記述されている語彙も馴染みのないものが多くあります。
何はともあれ、ようやく PHP の観点から依存性注入の概念を説明しましょう。
まず、ここにデータベース接続を使用する必要があるクラスがあると仮定します。最も原始的な方法によれば、このクラスは次のように記述できます。関数には、まずデータベース クラス ファイルを含めます。その後、新しい Db を通じて db クラスをインスタンス化し、データベース接続情報を渡します。その後、getList メソッドは $this->_db を通じてデータベース クラスを呼び出してデータベースを実装します。オペレーション。
この問題を解決するために、Factory メソッドを作成し、Factory::getDb() メソッドを通じて db コンポーネントのインスタンスを取得しました。
class example { private $_db; function __construct(){ include "./Lib/Db.php"; $this->_db = new Db("localhost","root","123456","test"); } function getList(){ $this->_db->query("......");//这里具体sql语句就省略不写了 } }
サンプル クラスは次のようになります。
rreee
外部からのインジェクションに依存します。ということですか?次の例を見てください:
class Factory { public static function getDb(){ include "./Lib/Db.php"; return new Db("localhost","root","123456","test"); } }
このように、サンプル クラスは外部クラスから完全に分離されており、Db クラスにはファクトリ メソッドや Db クラスが存在しないことがわかります。外部からサンプル クラスの setDb メソッドを呼び出して、接続インスタンスを直接挿入します。このように、この例では、db 接続がどのように生成されるかを気にする必要がありません。
これは依存関係注入と呼ばれます。実装はコード内に依存関係を作成しませんが、それをパラメーターとして渡します。これにより、プログラムの保守が容易になり、プログラム コードの結合度が低減され、疎結合が実現されます。
これはまだ終わっていません。サンプル クラスで db に加えて他の外部クラスが使用されていると仮定しましょう。疲れていますか?
わかりました、毎回非常に多くの行のコードを記述する必要がないように、別のファクトリ メソッドを作成しました:
class example { private $_db; function __construct(){ $this->_db = Factory::getDb(); } function getList(){ $this->_db->query("......");//这里具体sql语句就省略不写了 } }
class example { private $_db; function getList(){ $this->_db->query("......");//这里具体sql语句就省略不写了 } //从外部注入db连接 function setDb($connection){ $this->_db = $connection; } } //调用 $example = new example(); $example->setDb(Factory::getDb());//注入db连接 $example->getList();
当初は setXXX メソッドを通じてさまざまなクラスを注入していました。コードは非常に長く、多くのメソッドが存在します。ただし、これはあまりクールではありません。setXXX メソッドは必要ありません。そのため、ファクトリ メソッドは必要ありません。 2. パッケージ化したら、依存関係の注入をどのように実装すればよいでしょうか?
$example->setDb(Factory::getDb());//注入db连接 $example->setFile(Factory::getFile());//注入文件处理类 $example->setImage(Factory::getImage());//注入Image处理类 ...
Di は、いわゆるコンテナーであり、さまざまなものを保存します。 Type インスタンスを使用する場合、$di->set() を通じて db という名前のインスタンスを設定します。これはコールバック関数を通じて渡されるため、db クラスは設定されたときにのみインスタンス化されます。 $di->get('db') が実行されるときも同様に、シングルトン モードを di クラスの設計に統合することもできます。
このように、グローバル スコープで Di クラスを宣言し、注入する必要があるすべてのクラスをコンテナーに配置し、そのコンテナーをコンストラクターのパラメーターとして example に渡すだけで済みます。サンプルクラスのコンテナからインスタンスを取得できます。もちろん、コンストラクターである必要はありません。setDi(Di $di) メソッドを使用して Di コンテナーに渡すこともできます。つまり、合意は自分で行うものなので、自分で理解する必要があります。 。
依存関係注入と主要なコンテナーの概念が導入されたので、残っているのはそれを実際に使用して理解することだけです。
以上がPHP 依存性注入 (DI) と制御反転 (IoC) に関する実践的なチュートリアルを共有します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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