魔法使いの卵

WEBエンジニアの卵の成長記録

Laravelエキスパート養成読本メモ(ファサード)

ファサードとは

  • サービスコンテナが管理しているクラスに対して静的なインターフェースを提供するクラス群

ファサードの定義と正体

  • ファサードの定義元はaliases(エイリアス)
    • app/config/app.php
  • aliasesに定義されている配列に対してリクエスト時に以下のPHP標準関数を使う
  • 実際に動いているのは以下(例)
    • Illuminate\Support\Facades\〜'クラス
  • つまり、ファサードの定義はapp/config/app.phpのaliasesで行っている

ファサードからサービスコンテナへの流れ

  • 以下を例として追いかける
    • Hashクラスを確認
  • getFacadeAccessorメソッドが実装されているだけ
  • 親クラスを確認してみる

    • Illuminate\Support\Facades\Facade
  • 存在しないスタティックメソッドを呼び出した場合は以下が実行される

  • __CallStaticメソッド内でgetFacadeRootメソッドが実行される
  • getFacadeRootメソッドはgetFacadeAccessorを引数に以下のメソッドを実行する
    • resolveFacadeInsttance
  • resolveFacadeInsttanceはstatic::$appという配列から   getFacadeAccessorの値をキーにして配列からインスタンスを取得している
  • static::$appの正体とは?
    • Illuminate\Foundation\Application
  • つまりどういうことだってばよ

ファサードのメリット

ファサードは手軽

  • サービスコンテナに登録されている静的メソッドをわかりやすい形で呼び出せる(以下、例)
    • Class::method

感想

  • すごいわかりやすいように書いてくれているのがわかるけど理解するための前提知識がたぶん足りてない
  • 何時間も読んでこうやって自分なりにまとめたりしてようやくちょっとだけ「こういうことなのかな?」って思えた
  • サービスコンテナもファサードもすごい大切なところだと見てて感じたから時間はかかってでも理解しないといけないとおもった
  • 読んでダメならもの作ってその上でやっていくしかないなぁとおもったw
  • でもおもったのはこの本マジで買ってよかった。

参考元
Laravelエキスパート養成読本[モダンな開発を実現するPHPフレームワーク!] (Software Design plus)