Laravelの依存性注入の書き方

王林
リリース: 2023-05-20 18:38:38
オリジナル
401 人が閲覧しました

人気の PHP フレームワークである Laravel の中核機能の 1 つは、依存関係注入 (Dependency Injection、以下 DI) メカニズムです。依存関係の注入を使用すると、オブジェクトの依存関係をオブジェクト自体から切り離すことができるため、コードの可読性、テスト容易性、保守性が向上します。この記事ではLaravelの依存関係注入の実装方法と使い方を紹介します。

  1. 基本概念

依存関係の注入は設計パターンであり、その中心的な考え方は、オブジェクトに必要な依存関係をオブジェクト自体から分離して、結合の削減とテスト容易性の向上を実現することです。 、メンテナンス性の向上などを目的としています。 Laravel フレームワークでは、DI メカニズムの実装は依存性注入コンテナー (以下、DI コンテナーと呼びます) に基づいており、これには主に次の点が含まれます:

  • オブジェクト属性の自動注入: DI コンテナは、注入されたオブジェクトのプロパティを自動的に注入する必要があります。
  • 依存関係の自動バインドと解決: DI コンテナは、クラス間の依存関係を自動的にバインドして解決します。
  • シングルトン モードのサポート: DI コンテナーはシングルトン モードの使用をサポートできます。

DI コンテナの基本概念を理解したら、Laravel フレームワークでのその具体的な実装を検討し始めることができます。

  1. DI コンテナの実装

Laravel フレームワークでは、DI コンテナの実装は App クラスであるサービス コンテナ (Service Container) に基づいています。 Appクラスはアプリケーション全体のコアクラスであり、使用する必要のあるすべてのサービスと依存関係の管理、登録、解決を担当します。したがって、LaravelのDIコンテナのコアクラスでもあります。サービスコンテナの具体的な実装を見てみましょう。

2.1 サービスの登録と解決

Laravel でのサービスの登録には、主にサービスプロバイダーの登録とサービスの登録の 2 つの手順が含まれます。サービスプロバイダーを登録すると、サービスを毎回手動で登録するのではなく、サービスの一元管理と登録が容易になります。登録サービスは、後続の解析のためにオブジェクトを DI コンテナに挿入します。

登録されたサービス プロバイダーは、config/app.php 構成ファイルで構成できます。サービスプロバイダーをプロバイダー配列に追加するだけです。例:

'providers' => [
    // Laravel Framework Service Providers...
    IlluminateAuthAuthServiceProvider::class,
    IlluminateBroadcastingBroadcastServiceProvider::class,
    IlluminateBusBusServiceProvider::class,
    IlluminateCacheCacheServiceProvider::class,

    // Application Service Providers...
    AppProvidersAppServiceProvider::class,
    AppProvidersAuthServiceProvider::class,
    AppProvidersEventServiceProvider::class,
    AppProvidersRouteServiceProvider::class,
],
ログイン後にコピー

登録サービスは、App クラスのバインド メソッドを通じて登録できます。例:

// 将Foo类注册到DI容器中
app()->bind('foo', function() {
    return new Foo();
});
ログイン後にコピー

上記のサンプル コードでは、bind メソッドを通じて Foo クラスを DI コンテナに登録し、対応するエイリアスを foo として指定します。 Laravel では、解析と呼び出しを容易にするためにサービスのエイリアスを指定できることに注意してください。

解析サービスは、App クラスの make メソッドを通じて解析できます。例:

// 通过别名解析Foo类实例
$foo = app('foo');
ログイン後にコピー

2.2 サービスの自動解決

Laravel では、DI コンテナがクラス間の依存関係を自動的に解決するため、依存関係を手動で渡して DI コンテナに任せる必要はありません。自動的に依存性注入の問題の解決にご協力ください。たとえば、次の 2 つのクラスがあります。

class Foo {
    public function __construct(Bar $bar) {}
}

class Bar {
    public function __construct(Baz $baz) {}
}
ログイン後にコピー

ここで、Foo クラスは Bar クラスに依存し、Bar クラスは Baz クラスに依存します。 Foo クラスのインスタンスを作成したい場合は、DI コンテナを通じてそれを解決するだけです:

// 自动解析依赖关系,并通过DI容器创建Foo类实例
$foo = app(Foo::class);
ログイン後にコピー

ここでは、DI コンテナは Bar クラスと Baz クラスのインスタンスを自動的に作成し、それらをコンストラクター内の Foo クラス。

2.3 サービスのシングルトン モード

Laravel では、singleton メソッドを通じてサービスをシングルトン モードとして登録できます。これは、サービスが呼び出されるたびに同じインスタンスが返されることを意味します。例:

// 将Foo类注册为单例模式
app()->singleton('foo', function() {
    return new Foo();
});
ログイン後にコピー

ここでは、singleton メソッドを使用して Foo クラスをシングルトン モードとして登録します。これは、foo サービスが呼び出されるたびに、Foo クラスの同じインスタンスが返されることを意味します。

  1. 概要

Laravel の DI コンテナメカニズムは、依存関係注入の実装プロセスを大幅に簡素化し、依存関係をより柔軟かつ便利に管理および使用できるようにします。 Laravelフレームワークを利用する場合、DIコンテナを使いこなすことで開発効率が大幅に向上し、コードのテスト性や保守性の面でも多くのメリットが得られます。この記事では、LaravelにおけるDIコンテナの基本的な概念、実装、使い方について紹介しますので、皆様のお役に立てれば幸いです。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!