PHP重构如果否则

时间:2017-03-01 11:43:09

标签: php laravel if-statement refactoring

我有这个if else结构,我想重构其他因为我想清理一下代码。只有我不确定如何重构其他内容。

if ($validator->fails()) {
   return Redirect::back()
       ->with('error_code', 5)
       ->withErrors($validator->errors())
       ->withInput();
} else {
    // do something if validator does not fail
    return Redirect::back();
}

任何人都知道如何重构其他内容?

非常感谢提前!

3 个答案:

答案 0 :(得分:4)

在这种情况下,你甚至不需要else语句,因为你的IF中有一个返回。如果验证失败,它将返回并且永远不会到达Redirect::back(); 所以像这样使用它:

if ($validator->fails()) {
   return Redirect::back()
       ->with('error_code', 5)
       ->withErrors($validator->errors())
       ->withInput();
}

return Redirect::back();

答案 1 :(得分:2)

如果您希望在方法结束时只有一个返回点:

$back = Redirect::back();
if ($validator->fails)) {
    $back->with('error_code', 5)
        ->withErrors($validator->errors())
        ->withInput();
}
return $back;

答案 2 :(得分:1)

如果您想尽可能地减少它,您还可以删除if语句的括号。在PHP和许多其他语言中,如果语句中有单行执行,则可以删除括号。

所以缩小版将是:

if ($validator->fails()) 
    return Redirect::back()
       ->with('error_code', 5)
       ->withErrors($validator->errors())
       ->withInput();

return Redirect::back();

您还可以使用Ternary Operator以下列方式重写它:

return $validator->fails() ? Redirect::back()->with('error_code', 5)->withErrors($validator->errors())->withInput() : Redirect::back();

最后,我想指出编写代码的最佳方法不一定是尽可能地缩小编写代码。我上面使用三元运算符的例子就是一个很好的例子,它真的能让它更具可读性吗?否。

应该重构这种类型的语句,以便更容易查看和读取语句实际执行的操作。在原始示例中拥有else {}方式并不一定是坏事。