我被怪异的if else
行为困扰着,我真的不知道是什么原因造成的!
我正在尝试根据以下条件计算一些值:
if ($totalWeight < 500 && $finalCurrency == "INR") {
echo "45 INR";
} else if ($totalWeight > 500 && $finalCurrency == "INR") {
echo "100 INR";
} else if ($totalWeight < 500 && $finalCurrency == "USD") {
echo "4 USD";
} else {
echo "Unable";
}
此条件始终跳至else
,并显示“无法使用”。我通过打印检查了$totalWeight
和$finalCurrency
变量,它们显示得很好。如果它们很好,那么为什么这种情况总是出现在else
上?
答案 0 :(得分:1)
问题可能是您没有想到可能会发生的某些情况。
这是您的代码:
if($totalWeight < 500 && $finalCurrency == "INR") {
echo "45 INR";
} else if($totalWeight > 500 && $finalCurrency == "INR") {
echo "100 INR";
} else if($totalWeight < 500 && $finalCurrency == "USD") {
echo "4 USD";
} else {
echo "Unable";
}
那么,如果发生什么事:
$totalWeight = 500
->您转到else {}
$finalCurrency
与INR
或USD
->您转到else {}
如果您属于这种情况,将转到else {}
因此,添加if($totalWeight <= 500...)
或if($totalWeight >= 500...)
,至少对第一种情况您应该有帮助。
答案 1 :(得分:1)
重新排列这样的复杂条件可能是有启发性的。如果我们将事物分解开来以便先检查货币然后再检查权重,并确保始终有else
的情况,我们将得到以下内容:
if ($finalCurrency == "INR") {
if ( $totalWeight < 500 ) {
echo "45 INR";
}
elseif ($totalWeight > 500) {
echo "100 INR";
}
else {
echo "Unable";
}
} elseif ($finalCurrency == "USD") {
if ( $totalWeight < 500 ) {
echo "4 USD";
}
else {
echo "Unable";
}
} else {
echo "Unable";
}
在此结构中,实际上存在三个导致“无法使用”的分支:
第一个最有可能是错误,第二个应该是大于,而不是大于或等于。
这将使我们拥有:
if ($finalCurrency == "INR") {
if ( $totalWeight <= 500 ) {
echo "45 INR";
}
else {
echo "100 INR";
}
} elseif ($finalCurrency == "USD") {
if ( $totalWeight <= 500 ) {
echo "4 USD";
}
else {
echo "Unable";
}
} else {
echo "Unable";
}
请注意,此结构为我们提供了另一个优点:在每种“无法”情况下,我们都可以回显不同的消息,以查看代码的去向。