为什么在 PHP 的 laravel 模型类中使用静态方法?

新手上路,请多包涵

在 PHP laravel 中,我们有这样的代码

$user = User::find(1);
var_dump($user->name);

我不关心如何使用 find 方法,我关心为什么 laravel 使用静态方法?静态方法的使用不应该使方法难以测试吗?

如果他们使用单例设计会更好吗?

例如

$user = User::getInstance()->find(1);
var_dump($user->name);

原文由 Ryan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 465
1 个回答

事实上,您的示例与 Laravel 在幕后所做的非常相似。当您执行 User::find() 时,您实际上是在请求一个新实例,即 Collection 实例或 QueryBuilder。

Illuminate\Database\Eloquent\Model( 参考):

 public static function find($id, $columns = array('*'))
{
    if (is_array($id) && empty($id)) return new Collection;

    $instance = new static;

    return $instance->newQuery()->find($id, $columns);
}

作为旁注,您还将看到在 Laravel 中使用静态方法的另一种方式,例如 Input::get() 。这些被称为 Facades。

Facades 为应用程序的 IoC 容器中可用的类提供一个“静态”接口 …可测试性和灵活性比传统的静态方法。

当用户在 … facade 上引用任何静态方法时,Laravel 从 IoC 容器解析缓存绑定并针对该对象运行请求的方法(在本例中为 get)。

您可以在以下位置阅读有关 Larave Facades 的更多信息: http ://laravel.com/docs/facades

原文由 Unnawut 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏