Laravel 在控制器中使用 public 静态函数不好吗
Laravel is it bad to use public static functions in controllers
在laravel控制器中使用public静态函数不好吗
在我的产品模型中,我有一个如下所示的函数:
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();
像上面那样使用静态函数不好吗?
当您创建静态方法时,没有任何东西会固有地破坏,但正如在所有文档中一样,不推荐这样做。为什么?
静态状态无处不在,完全破坏了可测试性,因为您不能只重置状态。此外,任何事情都可能以代码的其他方面无法预测的方式影响状态,从而导致可能出现极其不可预测的行为。
Laravel 4 通过使用静态 'facades' 来防止这种情况。这些立面是 "syntactic short-hand for IoC resolution"。它们既提供语法糖又防止紧密耦合的代码。
可以更改由外观解析的 类 并允许您注入模拟系统或任何您想要的东西。
这个问题本身是非常基于意见的。我不会说在您的模型中使用这些方法一定不好,但我也不建议这样做。 (有关该检查的更多信息,请查看 )
无论如何,Eloquent 为您的这个特定问题提供了更好的解决方案:Mutators!
它们有点像 "setter methods",您可以在其中修改或 改变 将分配给 属性 的值。这是一个例子:
public function setEndDateAttribute($time){
if ($time == 2)
{
$this->attributes['end_date'] = Carbon::now()->addMonths(2)->toDateTimeString();
}
else
{
$this->attributes['end_date'] = Carbon::now()->addDays($time)->toDateTimeString();
}
}
然后你这样使用它:
$newProduct->end_date = $time;
在laravel控制器中使用public静态函数不好吗
在我的产品模型中,我有一个如下所示的函数:
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();
像上面那样使用静态函数不好吗?
当您创建静态方法时,没有任何东西会固有地破坏,但正如在所有文档中一样,不推荐这样做。为什么?
静态状态无处不在,完全破坏了可测试性,因为您不能只重置状态。此外,任何事情都可能以代码的其他方面无法预测的方式影响状态,从而导致可能出现极其不可预测的行为。
Laravel 4 通过使用静态 'facades' 来防止这种情况。这些立面是 "syntactic short-hand for IoC resolution"。它们既提供语法糖又防止紧密耦合的代码。
可以更改由外观解析的 类 并允许您注入模拟系统或任何您想要的东西。
这个问题本身是非常基于意见的。我不会说在您的模型中使用这些方法一定不好,但我也不建议这样做。 (有关该检查的更多信息,请查看
无论如何,Eloquent 为您的这个特定问题提供了更好的解决方案:Mutators!
它们有点像 "setter methods",您可以在其中修改或 改变 将分配给 属性 的值。这是一个例子:
public function setEndDateAttribute($time){
if ($time == 2)
{
$this->attributes['end_date'] = Carbon::now()->addMonths(2)->toDateTimeString();
}
else
{
$this->attributes['end_date'] = Carbon::now()->addDays($time)->toDateTimeString();
}
}
然后你这样使用它:
$newProduct->end_date = $time;