コントローラのコンストラクタに型を書くだけでインスタンスが渡ってくるのは、なぜですか。
Laravel がリフレクションでコンストラクタの型宣言を読み、その型を解決して渡しているからです。依存がさらに依存を持てば再帰的に解決されます。自明でないものだけ登録が要ります。
面接官が見ているのは仕組みの補強。
これは「Laravel のサービスコンテナが提供している主な価値はどれですか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- Laravel がリフレクションで型宣言を読み、その型を解決して渡している
その通りです。依存がさらに依存を持てば再帰的に解決されます。インターフェースなど解決方法が自明でないものだけ bind が必要です。 - PHP の言語機能として自動的に注入される
PHP の機能ではありません。Laravel が実装しています。 - コントローラの親クラスが引数を用意している
親クラスではなくコンテナの仕事です。 - 設定ファイルに書いた対応表を読んでいる
bind した場合は対応表を見ますが、具象クラスなら型宣言だけで解決されます。
面接官は何を見ているか
- コンテナが型を見て解決していると言えた
- リフレクションで型情報を読んでいることに触れた
- 「魔法ではない」と理解している
模範解答
Laravel がリフレクションでコンストラクタの型宣言を読み取り、その型を解決してインスタンスを作って渡しています。その型がさらに依存を持っていれば、再帰的に解決されます。解決方法が自明でないもの(インターフェースなど)だけ、ServiceProvider で明示的に bind してやる必要があります。