【Laravel】「$this->app->メソッド」と「app()->メソッド」の違い(appカッコ メソッドとは?)

engineers-working-around-laptop Laravel
記事内に広告が含まれていることがあります。
[PR]

Laravelのコードで、「$this->app->メソッド」と「app()->メソッド」はどちらで記述しても同じ処理になる。

なぜ、同じ処理なのに異なる書き方があるのか?と気になった人もいるはず。ここではそれぞれの違いについて解説しています。

「$this->app->メソッド」と「app()->メソッド」の違い

「$this->app->メソッド」と「app()->メソッド」の違いは、Laravelに登録されたヘルパか、インスタンス内のメソッドとして呼び出しているかの違い。

記述内容
app()ヘルパ
$this->appインスタンス内のメソッド

appヘルパ

Laravelはよく使う処理をヘルパとしてグローバルな関数をデフォルトで登録している。Laravelの処理を助けてくれる関数なので、ヘルパ(関数)と呼ぶ。

使い方は「ヘルパ名()」。例えば、リダイレクトを設定できる redirect()、ビューファイルを呼び出す view() もヘルパ。

(参考)Laravel公式 ヘルパ一覧

appヘルパは、サービスコンテナのインスタンスを返す。

サービスコンテナはIlluminate\Foundation\Applicationクラスで定義されている。このため、app()を実行すれば、Illuminate\Foundation\Applicationクラスのインスタンスを生成したことになる。

$this->app

$this->app は、処理を記述しているクラス自身のオブジェクトの中のappメソッドを呼び出す処理になる。

$thisはクラスの中で使い、ここで呼び出すメソッドをインスタンスメソッドという。

インスタンスメソッドは、クラス内であればスコープ外(関数の外)であっても、そのメソッドを呼び出すことができる。

つまり、$this->appを使う場合は、そのファイル内でIlluminate\Foundation\Applicationのインスタンスが使える場合に限る。

(use Illuminate\Foundation\Application をしているか、Illuminate\Foundation\Applicationのクラスを拡張(extend)している場合)

まとめ

記事を読んでいると、「$this->app->メソッド」と「app()->メソッド」どちらを使ってもいいという記述があるが、それぞれの処理は異なる。

「$this->app->メソッド」を使って、あれ、動かない、、、ということがないようにに、違いを理解していることは大切。

タイトルとURLをコピーしました