Laravel静态和非静态方法

问题描述

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

User::where('id',1)->first();

也这样:

$user = new User();
$user->where('id',1)->first();

如何用PHP做到这一点? 因为据我所知,一种方法只能是静态或非静态的,而不能同时是两者。

解决方法

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

PHP.net Manual - OOP - Overloading __callStatic __call

Laravel - Github - Eloquent Model __callStatic

Laravel - Github - Eloquent Model __call

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...