php - 我应该如何静态访问此方法?
问题描述
我有一个 Eloquent 模型 Person,它具有以下功能
public function findRecordByIdm($idm)
{
$record = Person::find($idm);
return $record;
}
在一个单独的控制器 ProspectController 中,我想调用该函数来获取 $idm 返回的 Person 记录。如果我在没有声明它是静态方法的情况下这样做,我会得到一个
non static method should not be called statically
我知道由于他们的测试困难,我不应该简单地将方法声明为静态。相反,我应该如何让这个函数可以从 ProspectController 访问?
解决方案
Find 不是 Model 上的方法,它实际上是 Builder 类上的实例方法。由于 , 的定义Model::__callStatic
(Model::find
或任何其他不存在的方法)被传递给 Builder 类的新实例。这是您可以静态和非静态调用 find 的唯一原因,因为Model::find
它实际上并不存在。
您可以使用模型的实例,就像 u_mulder 建议的那样,但这是我认为静态方法很好的一种情况。这遵循与工厂模式类似的设计,其中该静态方法的全部目的是准备和返回模型的实例。
推荐阅读
- android - 在 FCM 消息传递中实施谷歌日历后,我的应用程序崩溃
- javascript - How do I set localStorage items in Angular 4.4.6?
- java - 如何在实体类上为两种不同的列组合添加唯一约束
- r - 如何在不使用调查设计的情况下计算调查数据的 R 估计标准误差?
- scala - 为什么 Scala 匹配元组失败
- ssl - 在 IBM WebSphere 中定制客户端认证
- python - 将列表列表与另一个列表进行比较,并返回常见的列表
- node.js - 如何使用 dialogflow-nodejs-client-v2 将 Dialogflow API v2 与 MS BotFramework 集成
- json - kendo aspnetmvc 发布错误与 Jquery json 读取冲突
- pdf - 避免整个 html 表格以 pdf 格式在下一页上移动