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 メソッドで、目的のクラスを別名で呼び出せるようにしているだけ、って僕は解釈しているんですけど、何故一度オートローダを経由させているのかは分かりませんでした。
(最初から全部エイリアス登録するだけじゃあかんの?みたいな)

スポンサーサイト

コメント