こんにちは、Nakaです。

今回は Laravel の動的な挙動を理解したい方向けに、Eloquent モデルや Facade、Macro がどのように動作しているのか、実際のソースコードを追いながら解説していきます。

なぜ Laravel の挙動は「魔法」に見えるのか

Laravel を触っていると、誰しも一度はこんなことを感じたことがあるのではないでしょうか。

「便利だけど、正直よく分からない…」と感じたことがある方も多いはずです。PHP を素直に書いてきた人ほど、この“よく分からなさ”に引っかかります。実は、Laravel ではこうした魔法のように見える挙動の裏側で PHP のマジックメソッド が活躍しています。

実際の挙動の例

例えば Eloquent モデルを使うと、

$user = User::first();
echo $user->name;

name というプロパティは User クラス内で定義されていませんが、値を取得することができます。さらに、

User::where('email', '[email protected]')->first();

where というメソッドはEloquentモデルには定義されていませんが、呼び出すことができます。こうした挙動が積み重なることで、Laravel のコードはまるで魔法のように見えてきます。

マジックメソッドとは?

PHP には、特定の条件で自動的に呼び出される特殊なメソッド が用意されています。 __construct もマジックメソッドの一つで、普段から使っている方も多いでしょう。Laravel では、存在しないプロパティやメソッドを呼んだときに挙動を制御するために、次の 4 つのマジックメソッドがよく使われます。

Laravel では、この 4 つを使うことで 個別にプロパティやメソッドを定義せずに機能を実現 しています。