如果其他情况在PHP中似乎无法正常工作

时间:2018-07-20 09:15:28

标签: php

我被怪异的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上?

2 个答案:

答案 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 {}
  • $finalCurrencyINRUSD->您转到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";
}

在此结构中,实际上存在三个导致“无法使用”的分支:

  • 如果货币为INR,权重为恰好为500
  • 如果货币为美元,且权重为大于或等于500
  • 如果货币不是INR和USD,

第一个最有可能是错误,第二个应该是大于,而不是大于或等于

这将使我们拥有:

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";
}

请注意,此结构为我们提供了另一个优点:在每种“无法”情况下,我们都可以回显不同的消息,以查看代码的去向。