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

2024-01-03

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

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

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

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

e.g.

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

事实上,您的示例与 Laravel 在幕后所做的非常相似。当你这样做时User::find(),您实际上是在请求一个新实例,可以是 Collection 的实例,也可以是 QueryBuilder 的实例。

照亮\数据库\雄辩\模型 (参考 https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Model.php):

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()。这些称为“外观”。

外观为应用程序的 IoC 容器中可用的类提供“静态”接口...Laravel“外观”充当 IoC 容器中底层类的“静态代理”,提供简洁、富有表现力的语法的好处,同时保持更多比传统静态方法的可测试性和灵活性。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 PHP 的 Laravel 模型类中使用静态方法? 的相关文章