[英]PHP if else - proper use of “else”
很久以前,一位教授告诉我,在一系列“链接”多个条件时我会使用else
(我还在学习)。 既然我几年后一直在修改几个框架和CMS,我发现我教的内容并不一定如此,这很有趣。
我被教导在一系列条件之间使用else
:
function double(param){
if(param==1){
return param+=1;
}
else
if(param==2){
return param+=2;
}
else{
return false;
}
}
如今,我似乎看到了这一点,我很久以前就被警告不要这样做:
function double(param){
if(param==1){
return param+=1;
}
if(param==2){
return param+=2;
}
return false;
}
这个示例代码可能不起作用,但想法是: 是否有必要在每个条件之间使用else
? 如果是这样(或不是这样),在使用任何一种方式时我应该注意什么? 一定有什么东西导致我的教授告诉我这样的事情。
使用else
或不使用它的意思是两个不同的东西。
如果您希望测试一系列条件,其中最多可能是一个,则使用else
或者else if
。 当一个条件的计算结果为true时,将执行块中的代码,然后退出整个if-else结构。
当多个条件可能为真时,使用else
将阻止其他条件评估为true,因此在这种情况下使用else
是错误的。
编辑:我现在看到你指的是每个子句包含一个return语句的特定情况。 在这种情况下,最好使用else
或elseif
来明确if-else构造以第一种方式运行 - 即。 最多可以执行一个条件。
没有必要使用else,因为控制流立即在return关键字点返回函数。
此外,当发现不必要的回报时,我发现使用了else,因此在所有情况下都更喜欢替代2。
这真的只是一个意见问题。
在这样的情况下没有必要使用else
,但是你的教授可能已经描述了一个不同的情况,或者他只是让你为了强调/强制清晰而做。
首先,我认为从同一个函数返回不同的数据类型通常是糟糕的风格,但话说回来,举个例子:
function double($param) {
if ($param == 1) {
return $param + 1;
} else if ($param == 2) {
return $param + 1;
} else {
return false;
}
}
现在想象一个类似的例子,除了每次都不返回:
function double($param) {
$returnMe = 0;
if ($param == 1) {
$returnMe = $param + 1
} else if ($param == 2) {
$returnMe = $param + 2;
} else {
$returnMe = false;
}
return $returnMe;
}
这似乎微不足道(并在提供它在很大程度上就是例子),你可以看到其他人确实有所作为。
在强迫一切都像他一样有其他东西时,他可能只是想提供一些风格的一致性(我认为这对新手来说是好的)。
当然,你是对的,在你提出的情况下,别的是不必要的。 无论是坏还是坏都只是一个意见问题。
if ($one) {
doA();
}
if ($two) { // ALWAYS check this block - it is not attached to anything
doB();
}
Truth table:
| $one True | $one False
------------+-----------+------------
$two True | A and B | B only
$two False | A only | none
if ($one) {
doA();
}
else if ($two) { // ONLY check this block if $one is false!
doB();
}
Truth table:
| $one True | $one False
------------+-----------+------------
$two True | A only | B only
$two False | A only | none
正如您在真值表中看到的那样,这两种情况并不相同。 因此,无论是使用if..else
还是if..if
不仅仅是语义或品味问题,它还具有实际的功能差异。
在if
内部返回的情况下,它将完全退出函数,因此它是一个特殊情况,其结果与else-if
相同。
我认为这是一个很好的做法,因为如果你忘记了return
条款(导致难以发现的错误),流程将会跟进
无论如何,else子句在某些情况下可能过于冗长,所以你可以使用elseif
:
<?php
if ($a > $b) {
return "a is bigger than b";
} elseif ($a == $b) {
return "a is equal to b";
} else {
return "a is smaller than b";
}
?>
是的 为什么? 因为这些条件基于相同的变量,只能满足一个。 因此,如果您使用elseif
(PHP)或else if
(JavaScript),您将提高代码可见性并可能避免将来出现一些错误。
PHP中的代码如下所示:
function double($param){
if($param==1){
return $param+=1;
}
elseif($param==2){
return $param+=2;
}
else{
return false;
}
}
或者,使用switch
对应方:
function double($param){
switch ($param) {
case 1:
return $param+=1;
case 2:
return $param+=2;
default:
return false;
}
}
在JavaScript中它看起来像这样:
function double($param){
if($param==1){
return $param+=1;
}
else if($param==2){
return $param+=2;
}
else{
return false;
}
}
它实际上取决于代码的流程...有时您需要使用单独的if(s),有时您需要使用if(s)和else(s)...但是为了您添加的示例。 就个人而言,我会选择您编写的第一个,因为它更有效,更易于阅读和理解。 也许还有其他因素和要点,但这就是我看到它的原因,这也是我选择第一个因素的原因。
还有一件事要添加..如果使用第二个,编译器将始终执行第二个“if”,如果$ param包含除“1”或“2”之外的其他值。
您可能想象我不久前在Apple的网站上发现的这种情况
switch(true) {
case foo == bar:
break;
case foo > 5:
break;
case foo > 10:
case bar > 5:
break;
}
你明白了。 我相信所有编译器都会将其分解为if / else代码,但我喜欢控制break语句的灵活性 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.