Laravel 静态和非静态方法

Far*_*arz 0 php laravel

在 Laravel 框架中,可以将模型的方法用作静态和非静态,例如,您可以像这样从 Databse 获取用户:

User::where('id', 1)->first();
Run Code Online (Sandbox Code Playgroud)

也像这样:

$user = new User();
$user->where('id', 1)->first();
Run Code Online (Sandbox Code Playgroud)

你怎么能在 PHP 中做到这一点?因为据我所知,一个方法只能是静态或非静态的,但不能同时是两者。

lag*_*box 5

这是通过魔术方法完成的,该方法__callStatic创建模型的新实例,然后在其上调用该方法。这个特殊的方法,where,在模型中不存在,并且由魔法方法处理,__call该方法在 Eloquent Builder 实例上调用这个方法。

PHP.net 手册 - OOP - 重载 __callStatic __call

Laravel - Github - Eloquent 模型 __callStatic

Laravel - Github - Eloquent 模型 __call