Php 结束if…else语句而不带else条件的最佳实践
在没有else条件的情况下结束if…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或
$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;