BackEnd

LaravelのDI

投稿日:

はじめに

今回の記事では、PHPのフレームワークであるLaravelのDIに関する機能と実装方法を紹介します。Laravelの基礎知識に関してはこちらをご覧ください。

DIに関する機能

DIとは

大雑把に説明すると、DI(Dependency Injection)とはあるコンポーネントで利用する別のコンポーネントを外部から注入できるようにするデザインパターンです。コンポーネント間を疎結合にするために、コンポーネント間の関係には具体的なコンポーネントではなくインタフェースを用います。DIに関してはこちらが参考になります。

サービスコンテナ

サービスコンテナはLaravelアプリケーションにおいてインスタンスの管理を行う機能です。サービスコンテナの役割は大きく分けて二つあります。一つはインスタンスの生成方法の管理、もう一つは生成したインスタンスの管理です。

サービスプロバイダ

サービスプロバイダはインスタンスの生成方法をサービスコンテナに登録する役割を担います。

サービスコンテナ

ここでは、サービスコンテナにインスタンスの生成方法を登録する方法(バインド)とサービスコンテナを利用したインスタンスの生成方法(解決)について説明します。

バインド

バインドには下記の四つの方法が用意されています。

  • bindメソッド
  • bindIfメソッド
  • singletonメソッド
  • instanceメソッド

bind

まず始めに一般的なbindメソッドの使用方法を説明します。下記のサンプルコードの通り、 app()->bind() メソッドの第一引数に文字列(登録名)、第二引数にクロージャ(生成方法)を指定します。

bindIf

bindIfメソッドは引数に指定した文字列に対応したバインドが存在しない場合にバインドを行います。

singletonメソッド

singletonメソッドでバインドした場合、生成したインスタンスはサービスコンテナにキャッシュされます。

instanceメソッド

instanceメソッドは生成したインスタンスをサービスコンテナにバインドします。

解決

サービスコンテナを介したインスタンスの生成には app()->make() メソッドか app() ヘルパ関数で行います。

サービスプロバイダ

サービスコンテナへのインスタンス生成方法のバインドは AppServiceProvider クラスや独自のサービスプロバイダクラスに定義します。独自のサービスプロバイダクラスを作成した場合は app.php に定義を追加します。

サービスプロバイダクラスにはregisterメソッドとbootメソッドがあります。バインド処理は基本的にregisterメソッドに記述します。ただし、インスタンス生成時に他のクラスを利用する必要がある場合はbootメソッドに記述します。

DIを利用する

ここではLaravelでのDIの利用方法を紹介します。まず、下記の用にインタフェースとクラスを定義し、バインドします。

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

上記のインタフェースをコンスタラクタインジェクションで利用する場合は下記のようになります。

メソッドインジェクション

メソッドインジェクションで利用する場合は下記のようになります。

さいごに

LaravelでのDIの利用にあたり重要な機能であるサービスコンテナとサービスプロバイダについて説明しました。

おすすめ書籍

初めてのPHP  PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応  基礎から学ぶ Vue.js

page_footer_300rect




page_footer_300rect




-BackEnd
-,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

rails

Rails5.2+Pumaのデプロイ設定

1 はじめに1.1 環境2 Pumaとは?2.1 Unicornとの比較2.2 Pumaのスレッド3 Pumaの使い方4 デプロイ設定4.1 Gemを追加4.2 Capfileの設定4.3 deplo ...

PHPerだけどKotlinを勉強したって良いよね その1〜クラス編〜

1 はじめに2 インターフェース2.1 基本2.2 デフォルト実装付メソッド2.3 同じメソッド名を持つ複数のインターフェース3 修飾子3.1 open3.2 abstract4 可視性修飾子5 さい ...

rails

Active Strageを使用してユーザーのアバターを登録、表示する

1 はじめに1.1 環境2 セットアップ2.1 前準備2.2 マイグレーションファイル作成2.3 設定ファイル3 実際に使って見る3.1 モデル3.2 コントローラー3.3 ビュー4 個人的メモ4.1 ...

rails

RailsでS3に画像をアップロードする

1 はじめに2 今回やりたいこと3 下準備3.1 ImageMagickをインストールする3.2 Gemをインストールする4 レコード生成時にファイルを指定してアップロードする4.1 アップローダを作 ...

icon

PHP、Ruby、Pythonのfor構文を比較してみた

1 はじめに1.1 環境2 ドキュメント2.1 PHP2.2 Ruby2.3 Python3 1から100まで出力してみる3.1 PHP3.2 Ruby3.3 Python4 リスト型(配列)の出力4 ...

フォロー

follow us in feedly

page_side_300rect

2019年2月
« 1月 3月 »
 12
3456789
10111213141516
17181920212223
2425262728 

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。