【问题标题】:Does Laravel Framework instantiate every model class at boot?Laravel 框架会在启动时实例化每个模型类吗?
【发布时间】:2017-05-29 23:33:21
【问题描述】:

WithwherehasMany 等 Eloquent 类的方法不是静态的。

但是我们这样称呼这些函数:

// Post is a child of Model class.
Post::where(...); // we don't use New keyword.

那么,Laravel 框架会在我们调用它们的方法之前初始化所有模型实例吗?

【问题讨论】:

  • 不,它没有。

标签: php laravel laravel-5


【解决方案1】:

在 Eloquent 的 Model 类中,您有以下函数可以动态处理静态方法调用。

public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}

如您所见,它创建了一个 Model 类的实例,在该实例上静态调用一个非静态方法,然后在该实例上调用该方法。

【讨论】:

  • 实例是否在方法执行后被销毁?
  • 通常的函数变量范围也适用于此。一旦函数内部的逻辑完成并返回结果,实例就会被销毁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 2014-11-19
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多