PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの依存性注入(DI)とは?基本概念と実装方法をわかりやすく解説

依存性注入(Dependency Injection、DI)とは、あるオブジェクトが別のオブジェクトの依存関係を外部から提供する手法のことです。依存性注入はソフトウェア設計における重要なアプローチの一つで、依存関係をハードコーディングすることを避け、実行時およびコンパイル時に依存関係を柔軟に変更できるようにします。

オブジェクトを注入する方法にはさまざまなアプローチがありますが、ここでは特によく知られている代表的な2つの方法を紹介します。

コンストラクタインジェクション

このアプローチでは、クラスのコンストラクタを通じてオブジェクトを注入します。インスタンス生成時に必ず依存関係が渡されるため、オブジェクトが常に完全な状態で初期化されるという特徴があります。

<?php
    class Programmer {
        private $skills;
        public function __construct($skills){
            $this->skills = $skills;
        }
        public function totalSkills(){
            return count($this->skills);
        }
    }
    $createskills = array("PHP", "JQUERY", "AJAX");
    $p = new Programmer($createskills);
    echo $p->totalSkills();
?>

出力結果

3

セッターインジェクション

セッター関数(セッターメソッド)を使用して、クラスにオブジェクトを注入する方法です。インスタンス生成後に依存関係を設定できるため、より柔軟な設計が可能になります。

<?php
    class Profile {
        private $language;
        public function setLanguage($language){
            $this->language = $language;
        }
    }
    $profile = new Profile();
    $language = array("Hindi", "English", "French");
    $profile->setLanguage($language);
?>

依存性注入のメリット

  • 新しい依存関係の追加が、新しいセッターメソッドを追加するだけで済み、既存のコードに干渉しません。
  • 依存関係がハードコーディングされないため、テスト時にモックやスタブへ差し替えやすく、単体テストが容易になります。
  • 実行時およびコンパイル時に依存関係を柔軟に変更でき、コードの再利用性と保守性が向上します。
  • クラス間の結合度が下がり、疎結合で拡張性の高い設計を実現できます。
  1. PHPファイルとは?開き方・編集・変換方法をわかりやすく解説

    PHPファイルとは .phpという拡張子を持つファイルは、PHP(Hypertext Preprocessor)のソースコードが記述された「PHPソースコードファイル」です。主にWebページのファイルとして利用され、Webサーバー上で動作するPHPエンジンによってHTMLを生成します。 ブラウザに表示されるのは、PHPエンジンがコードから生成したHTMLコンテンツです。PHPコードはサーバー側で実行されるため、PHPページにアクセスしてもコードそのものは見えず、サーバーが生成したHTMLだけを受け取る仕組みになっています。 なお、PHPソースコードファイルの中には、.phtml、.php3、.

  2. Rubyにおけるデカップリング手法:委譲と依存性注入

    オブジェクト指向プログラミングでは、あるオブジェクトが機能するために、別のオブジェクトに依存することはよくあります。 例えば、財務レポートを生成するためのシンプルなクラスを作ってみましょう。 class FinanceReport def net_income FinanceApi.gross_income - FinanceApi.total_costs end end この場合、FinanceReportはFinanceApiに依存していると言えます。外部の決済プロセッサから情報を取得するために、FinanceApiを利用しているわけです。 しかし、将来別のAPI