20

我在一个函数中有这个代码:

if ($route !== null) { // a route was found
    $route->dispatch();
} else {
    // show 404 page
    $this->showErrorPage(404);
}

现在 PHPmd 给出一个错误:

方法 run 使用 else 表达式。Else 从来都不是必需的,您可以简化代码以在没有 else 的情况下工作。

现在我想知道是否真的会是更好的代码来避免 else 而只是在 if 部分添加一个 return 语句?

4

5 回答 5

45

PHPMD 希望您使用早期的 return 语句来避免 else 块。类似于以下内容。

function foo($access) 
{
    if ($access) {
        return true;
    }

    return false;
}

您可以通过将以下内容添加到您的类文档块来抑制此警告。

/**
 * @SuppressWarnings(PHPMD.ElseExpression)
 */
于 2015-12-09T22:09:21.017 回答
6

您通常可以重写表达式以仅使用 if 并且它确实主观地使代码更具可读性。

例如,如果 showErrorPage 中断代码的执行,此代码的行为方式相同。

if ($route == null) { 

   $this->showErrorPage(404);
} 
$route->dispatch();

如果你的 if 语句的内容没有中断执行,你可以添加一个 return

if ($route == null) { 

   $this->showErrorPage(404);
   return;
} 
$route->dispatch();

如果您在循环中,则可以使用 continue 跳过该迭代

    foreach ($things as $thing ) {
        if ($thing == null) {
            //do stuff and skip loop iteration
            continue;
        }     

        //Things written from this point on act as "else"

    }
于 2018-12-28T18:30:12.807 回答
1

我不会担心 PHPmd 说什么,至少在这种情况下。

他们可能打算让您使用条件运算符,因为(在他们看来)它“更干净”。

$route !== null  ?  $route->dispatch() : $this->showErrorPage(404) ;
于 2015-09-20T07:58:00.147 回答
1

通过结束 404 生产分支删除 else 块:

if ($route === null) { 
  // show 404 page
  $this->showErrorPage(404);
  return;
}

// a route was found
$route->dispatch();
于 2019-12-11T04:43:15.577 回答
0

这个答案来晚了,但是您可以解决的另一种方法是使用else if. 因为有时你不能仅仅return遵循一些逻辑。

有你的榜样

if ($route !== null) { // a route was found
    $route->dispatch();
}
else if ($route === null) {
    $this->showErrorPage(404);
}

$route->doSomething();
于 2022-01-28T11:59:08.323 回答