Laravelのサービスコンテナとは何か?

サービスコンテナって何?

 
Laravelのサービスコンテナとは、クラスのインスタンスを管理する機能である。
 

どうして必要なの?

 
アプリケーション内のインスタンスは、例えばアプリ内で1つだけに制限したいインスタンスや、設定に前処理が必要なインスタンスがある。
 
開発者が、それらの処理を自前で管理するのではなく、サービスコンテナに任せることで楽できる。
 

機能は?

 
お願いすると、クラスのインスタンスを返してくれる。
 

使い方は?

 

サービスコンテナの取得

 
サービスコンテナを取得するには、こう書けば良い。
 
$app = app();
 
実体は、Illuminate\Foundation\Applicationクラスである。
 

バインド

 
サービスコンテナからインスタンスをもらうためには、前もってインスタンス生成の方法をサービスコンテナに教えておく必要がある。
 
これを「バインド」という。
 
app()->bind(TempLogger::class, function(Application $app) {
   $logger = new Logger('my_log');
   return new TempLogger($logger);
});
 
第1引数に文字列、第2引数にインスタンスの生成処理をクロージャで記述している。
 
TempLogger::classが指定されたら、クロージャの方法でインスタンスを生成してくれるようにバインドしている。
 

解決

バインドしたインスタンスを、サービスコンテナが返すことを「解決」(resolve)という
 
$logger = app()->make(TempLogger:class);
 
引数に対象の文字列を指定することで、インスタンスを返してくれる。