Laravel サービスコンテナ 調べてみた

サービスコンテナとは

Laravel内において、インスタンスを管理する機能。

サービスコンテナに特定のクラスのインスタンスの生成方法を保存しておくことで、コービスコンテナから特定の値を呼び出せばそれに準じたインスタンスが返される。

インスタンスの生成方法をサービスコンテナに保存することをバインド(bind)といい、特定のインスタンスを呼び出すことを解決という。

ちなみに、サービスコンテナの実態は、Illuminate\Fundation\Applicationクラスになる。

 

バインド

バインドをするには、bindメソッドを使用する。

バインドは、基本的にはServiceProviderクラスを作成して、そこに定義するのが良い。

ServiceProvideに関しては、こちらにまとめた。

以下例である。

class TextAnnkw {  ・・・①
 private $annkw;
 
 public function __construct()
 {
   $this->annkw = 'annkw';
 }
 
 public function getAnnkw()
 {
   return $this->annkw;
 }
}

app()->bind(TextAnnkw::class, function () { ・・・②
   return New TextAnnkw(); 
});

①今回バインドするクラスである。

「annkw」を返すだけの不毛なクラス。

②①で作成したクラスをbindメソッドを使用してバインドしている。

bindメソッドでは、第一引数に解決する際に呼び出す名前を、第二引数に解決する際に実行する処理をクロージャーで指定する。

以上がバインドの方法の一例である。

バインドの方法はbindメソッド以外にも、一度作成したインスタンスをキャッシュとして保存するsingletonメソッドなど複数存在するので、公式ドキュメントを参照。

 

解決

解決をする方法は、

・makeメソッドによる解決

・appヘルパ関数による解決

の2通りがある。

以下、例である。

$annkw = app()->make(TextAnnkw::class); ・・・①
echo $annkw->getAnnkw;
// annkw

$annkw = app(TextAnnkw::class); ・・・②
echo $annkw->getAnnkw;
// annkw

①makeメソッドを使用した場合は、引数にバインドの第一引数に指定した値を渡せば、インスタンスが返ってくる。

②appヘルパ関数も、引数にバインドの第一引数に指定した値を渡せば、インスタンスが返ってくる。

 

以上!!!!!!!