Php 为什么干净的代码禁止其他表达式

Php 为什么干净的代码禁止其他表达式,php,phpmd,Php,Phpmd,我在函数中有以下代码: if ($route !== null) { // a route was found $route->dispatch(); } else { // show 404 page $this->showErrorPage(404); } 现在PHPmd给出了一个错误: 方法run使用else表达式。否则就没有必要了 您可以简化代码,使其在没有其他工具的情况下工作 现在我想知道,如果避免使用else,只在if部分添加一个return语句

我在函数中有以下代码:

if ($route !== null) { // a route was found
    $route->dispatch();
} else {
    // show 404 page
    $this->showErrorPage(404);
}
现在PHPmd给出了一个错误:

方法run使用else表达式。否则就没有必要了 您可以简化代码,使其在没有其他工具的情况下工作


现在我想知道,如果避免使用else,只在if部分添加一个return语句,是否真的会更好?

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

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

$route !== null  ?  $route->dispatch() : $this->showErrorPage(404) ;

PHPMD希望您使用早期返回语句来避免else块。类似下面的内容

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

    return false;
}
您可以通过向类文档块添加以下内容来抑制此警告

/**
 * @SuppressWarnings(PHPMD.ElseExpression)
 */

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

例如,如果页面中断代码的执行,此代码将以相同的方式运行

if ($route == null) { 

   $this->showErrorPage(404);
} 
$route->dispatch();
如果If语句的内容没有中断执行,则可以添加一个返回

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"

    }

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

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

// a route was found
$route->dispatch();

那么有什么比phpMD更好的吗?许多程序员经常建议学习phpMD,这更干净吗?可能是在返回语句或其他地方,但除此之外,这些都是与干净代码完全相反的。是否有任何纸张或任何类型的参考资料可以让人看一看,试图理解这条没有其他内容的规则?@AntonioCS您可以在此处找到规则详细信息:。PSR-2的建议也可以在这里找到。规则实际上是说使用Else语句。规则和PSR建议说,没有必要采取其他措施。PHPMD规则集文档说:永远不需要带有else分支的if表达式。您可以以一种不需要else的方式重写条件,并且代码变得更易于阅读。要实现这一点,请使用早期返回语句。PSR-2标准在“编写更好的代码”一节中指出:*尝试尽早返回方法/函数,以避免不必要的深度。可能我们正在阅读不同的内容,但以下是我所阅读的内容:“当整个三元运算适合一行时,允许使用三元运算符。较长的三元数应拆分为if-else语句。”注意“拆分为if-else语句”。多个返回也不是很好,但是如果我不在循环或函数中呢?如果我使用的是WordPress模板部分呢?那么我想不出比使用“else”更干净的方法