Php 结束if…else语句而不带else条件的最佳实践

Php 结束if…else语句而不带else条件的最佳实践,php,coding-style,if-statement,Php,Coding Style,If Statement,在没有else条件的情况下结束if…else语句的最佳实践是什么?考虑下面的代码: $direction = $_POST['direction']; //Up or down if ($direction == "up") { code goes here... } elseif ($direction == "down") { code goes here... } else { //do nothing? } 如你所见,只有两个条件;除非您希望它显示错误消息,否则up或

在没有else条件的情况下结束if…else语句的最佳实践是什么?考虑下面的代码:

$direction = $_POST['direction']; //Up or down

if ($direction == "up") {
  code goes here...
}

elseif ($direction == "down") {
  code goes here...
}

else {
  //do nothing?
}
如你所见,只有两个条件;除非您希望它显示错误消息,否则up或down和else语句都没有真正的用途

大多数时候,我看到程序员只是简单地将else条件放在那里,但插入了注释,而不是像这样的任何工作代码

else {
      //error messages goes here...
}
或者假设如果它不是“向上”,那么其他所有东西都应该是“向下”,因为只有两个条件。如果用户输入“left”或“right”,则仍将被视为“down”。我觉得这有点不合适

if ($direction == 'up') {
  code goes here...
}

else {
  code goes here...
}
我知道如果我们在没有其他条件的情况下使用if,PHP仍然可以工作。但是如果有其他情况呢?在这样的情况下,如果我们不希望包含任何错误消息或有任何其他条件,那么如果我们希望保持严格的if…else语句,那么最佳实践是什么


提前感谢。

没有“如果……否则”声明。
只有
if
语句可以使用
else
elseif
运算符进行扩展

因此,关于不带
else
条件的
if
语句的最佳实践是不带
else
条件的
if
语句:

if (condition) {
  //some code
}
坦率地说,没有最佳实践。最佳实践只是遵循程序逻辑的实践。

这就是全部

我认为,如果在
else
上无事可做,那么就没有必要在代码中存在
else
块。如果包含
else
块,则意味着它有存在的目的,因此,如果代码为空,则代码仍然不完整。

不要写入空
else
s。这会把代码弄得乱七八糟,你的意思很明显

在许多情况下,您实际上可以使用:


我有时是这样做的。我不担心
“左”
被解释为
“down”
,因为我总是使用
preg_match(“{^up | down$},$direction)
验证我的输入。毫无疑问,
开关
更合适。。。但我不喜欢冗长的语法

if ($direction == "up")
    {
    // code goes here...
    }
else //if ($direction == "down")
    {
    // code goes here...
    }

这不是一个可以肯定的答案。这是我的观点,看看还有什么其他的观点会很有趣

场景1:测试布尔条件

这是最简单的情况:

if (condition) {}
else {}
如果将条件指定为
else将是多余的,读者很清楚代码的作用。在这种情况下,如果
,则没有使用
else的参数

场景2:测试无限状态的子集

在这里,我们对条件A和B(等等)的测试感兴趣,我们可能会也可能不会对条件A和B都不成立的情况感兴趣:

if (conditionA) {}
else if (conditionB) {}
else {} // this might be missing
这里重要的一点是,互斥状态的数量不是有限的,例如:
conditionA
可能是
$num%2==0
conditionB
可能是
$num%3==0

我认为在这里使用合理数量的树枝是自然和可取的;如果分支变得太多,这可能表明一些明智的OO设计使用将导致极大的可维护性改进

场景3:测试有限状态的子集

这是前两种情况之间的中间点:状态数是有限的,但多于两个。测试类枚举类型的值是一个原型示例:

if ($var == CONSTANT_FOO) {}
else if ($var == CONSTANT_BAR) {} // either this,
else {} // or this might be missing
在这种情况下,使用
开关
可能会更好,因为它会立即向读者传达状态的数量是有限的,并给出一个强有力的提示,说明在哪里可以找到所有可能状态的列表(在本例中,常量以
常量
开头)。我的个人标准是我测试的状态数:如果只有一个(没有
否则如果
),我将使用
如果
;否则,请使用
开关
。在任何情况下,我都不会在这种情况下编写
else if

添加
else
作为空的catch errors块

这与上述情景2直接相关。除非可能的状态是有限的并且在编译时已知,否则不能说“在任何其他情况下”意味着发生了错误。在场景#2中,一个
开关
会让人感觉更自然,我觉得这样使用
else
会有一种不好的代码味道

使用带有
默认分支的
开关
。它将更清楚地传达您的意图:

switch($direction) {
    case 'up': break;
    case 'down': break;
    default: // put error handling here if you want
}

这可能有点冗长,但读者很清楚代码的预期功能。在我看来,一个空的
else
块在这里会显得不自然和令人费解。

我尽量不写
else
。曾经根据我的经验,使用
else
会导致可读性较差的逻辑,尤其是当if/else被嵌套时

对于将var分配给
true
false
(或任何其他简单的这个或那个值),我始终使用:

$varx = false;
if ($my_codition_here === true) {
   $varx = true; 
}

当我有一个更大的逻辑块,你可以在I/EL中考虑“归属”时,我确保构造我的代码,这样如果条件满足,函数通常会返回:

if ($my_codition_here === true) {
    // A reasonable amount of logic goes here
    return $the_result_up_untill_here;
}

// All logic that would have been "else" goes here.
return $the_result_up_untill_here;
正如菲哈格所提到的;在考虑<代码> ELSIF < /代码> ./P>时使用<代码>开关<代码>语句。
正如你的常识所说,没有最佳实践,但有好的实践,我认为这是一个。

据我所知,不包括其他条件并不被视为“坏实践”。您只需执行脚本所要求的操作,如果对某个内容没有默认响应,那么就没有响应。但是,在本例中,
default
不会充当else语句吗?:)要回答OP喜欢的问题,你需要
if ($my_codition_here === true) {
    // A reasonable amount of logic goes here
    return $the_result_up_untill_here;
}

// All logic that would have been "else" goes here.
return $the_result_up_untill_here;