在Laravel框架中,可以将Model的方法用作静态和非静态方法,例如,您可以从Databse获取用户,如下所示:
User::where('id', 1)->first();
也像这样:
$user = new User();
$user->where('id', 1)->first();
如何在 PHP 中做到这一点? 因为据我所知,一种方法只能是静态或非静态的,而不能同时是两者兼而有之。
这是通过魔术方法完成的,该方法__callStatic
创建模型的新实例,然后在其上调用该方法。这个特定的方法,where
,在模型中不存在,并且由魔术方法__call
处理,该方法在 Eloquent Builder 实例上调用此方法。
PHP.net 手册 - OOP - 过载__callStatic
__call
拉拉维尔 - Github - 雄辩的模型__callStatic
拉拉维尔 - Github - 雄辩的模型__call