2019.02.17 Sunday
2016.09.19 Monday
Laravelのファサードの仕組み
アプリケーション内のクラスを手軽に呼べてしまうLaravelのファサードって、どんな仕組みで実現されているのか気になったので調べてみました。
と言ってもそれほど難しい仕組みではなく、オートローダ上で目的のクラスのエイリアスを登録しているだけでした。
(バージョンはLaravel5.3です)
JUGEMテーマ:PHP
ファサード登録処理が実行されるまで
ファサードは目的のクラスのエイリアスを class_alias
メソッドを使って登録して、別名で呼び出せるようにして実現されます。
実際に登録を行うのは Illuminate¥FoundationAliasLoader
というクラスで、こいつはアプリケーションの初期化過程で、 Illuminate¥Foundation¥Bootstrap¥RegisterFacades
クラスを経由して呼ばれます。
AliasLoaderで行われること
初期化段階ではまだエイリアスの登録まではまだやらず、spl_autoload_registerメソッドに、自身の load
メソッドをオートローダとして登録します。
load
メソッドがオートローダとして呼ばれた時、呼ばれたクラス名と一致するものがconfigの app.aliases
にあれば、 class_alias
メソッドでエイリアスを登録し、目的のクラスを別名で呼び出せるようにして、ファサードを実現しています。
疑問
要するに class_alias
メソッドで、目的のクラスを別名で呼び出せるようにしているだけ、って僕は解釈しているんですけど、何故一度オートローダを経由させているのかは分かりませんでした。
(最初から全部エイリアス登録するだけじゃあかんの?みたいな)
2019.02.17 Sunday