Laravelエキスパート養成読本メモ(ファサード)
ファサードとは
- サービスコンテナが管理しているクラスに対して静的なインターフェースを提供するクラス群
ファサードの定義と正体
- ファサードの定義元はaliases(エイリアス)
- app/config/app.php
- aliasesに定義されている配列に対してリクエスト時に以下のPHP標準関数を使う
- class_aliasを利用してエイリアス(別名)を登録
- 実際に動いているのは以下(例)
- Illuminate\Support\Facades\〜'クラス
- つまり、ファサードの定義はapp/config/app.phpのaliasesで行っている
ファサードからサービスコンテナへの流れ
- 以下を例として追いかける
- Hashクラスを確認
- getFacadeAccessorメソッドが実装されているだけ
親クラスを確認してみる
- Illuminate\Support\Facades\Facade
存在しないスタティックメソッドを呼び出した場合は以下が実行される
- __CallStatic(マジックメソッド)
- __CallStaticメソッド内でgetFacadeRootメソッドが実行される
- getFacadeRootメソッドはgetFacadeAccessorを引数に以下のメソッドを実行する
- resolveFacadeInsttance
- resolveFacadeInsttanceはstatic::$appという配列から getFacadeAccessorの値をキーにして配列からインスタンスを取得している
- static::$appの正体とは?
- Illuminate\Foundation\Application
- つまりどういうことだってばよ
ファサードのメリット
ファサードは手軽
感想
- すごいわかりやすいように書いてくれているのがわかるけど理解するための前提知識がたぶん足りてない
- 何時間も読んでこうやって自分なりにまとめたりしてようやくちょっとだけ「こういうことなのかな?」って思えた
- サービスコンテナもファサードもすごい大切なところだと見てて感じたから時間はかかってでも理解しないといけないとおもった
- 読んでダメならもの作ってその上でやっていくしかないなぁとおもったw
- でもおもったのはこの本マジで買ってよかった。
参考元
Laravelエキスパート養成読本[モダンな開発を実現するPHPフレームワーク!] (Software Design plus)