【发布时间】:2015-01-10 17:47:35
【问题描述】:
在 laravel 控制器中使用公共静态函数是不是很糟糕
在我的产品模型中,我有一个如下所示的函数:
public static function setEndDate($time)
{
if ($time == 2)
{
return Carbon::now()->addMonths(2)->toDateTimeString();
}
else
{
return Carbon::now()->addDays($time)->toDateTimeString();
}
}
然后在我的控制器中,我使用这样的函数:
//Validation etc..
$time = Input::get('end_date'); //To transform end-time
$newProduct = new Product();
$newProduct->some_value = Input::get('some_value');
$newProduct->some_value = Input::get('some_value');
$newProduct->end_date = Product::setEndDate($time); //Using my static function like this
newProduct->save();
像上面这样使用静态函数不好吗?
【问题讨论】:
-
一般来说使用静态调用是不好的(最好的做法不应该因为你使用最新的框架而改变)。它们导致与特定类名的紧密耦合,通常隐藏全局状态(以静态变量的形式)并且是单元测试的噩梦。 但是你可能会在 99.99% 的 Laravel 相关材料中看到它。做出自己的结论......
-
@tereško Laravel 的核心几乎都不是静态方法。 Laravel Facades 让它看起来像很多静态的,但在后台它实际上是一个服务定位器模式。
-
@lukasgeiter ,laravel 的外观 是 服务定位器(这有点意味着它们是一种反模式),我没有说任何关于使用静态范围的核心类。我是在指出几乎普遍使用 laravel 的代码以各种形式滥用静态范围。
-
@tereško 好的。只是想明确一点,Laravel(核心)不会滥用静态范围......
标签: php laravel static-methods