IF与SWITCH哪个更适合这项工作?为什么?

时间:2014-05-18 11:21:30

标签: php if-statement comparison switch-statement performance

我想知道是否可以在switch语句/ case中复制这种检查:

if(isset($_POST["amount"]) && (isset($_POST["fruit"]))) {    
    $amount = $_POST['amount'];
    $fruit = $_POST['fruit'];
    if($fruit == "Please select a fruit") { 
    echo "<script>alert('Required Field: You must choose a fruit to receive your total')</script>"; 
} else if(empty($fruit) or ($amount<=0) or ($amount>50)) {
    echo "<script>alert('Required Field: You must enter an amount between 0-50g to receive your total')</script>";
} ... and further on

注意:我更加关注可以在一个IF中完成的&&比较,以及是否可以在switch case中完成并接收类似嵌套if / else的结果。如果不可能,为什么?哪种方法更有效,为什么?

2 个答案:

答案 0 :(得分:0)

我宁愿坚持使用If-Else If条件而不是将其转换为Switch语句。 您必须意识到switch语句只接受一个参数:

switch($arg)

在您的情况下,amount$_POST["amount"]fruit$_POST["fruit"]。 您的第一个问题是如何在switch语句中传递这两个值。

答案 1 :(得分:0)

您不能在这种情况下使用开关,因为您正在检查产生isset结果的两个变量的条件(boolean)。实际上你可以做switch这个条件并在这个代码为true的情况下切换,如果该代码为false。但这不会有多大意义。 在一个开关中,您可以只检查一个变量或表达式,在这种情况下,您执行该开关评估结果的代码。 所以不,你不能用这些嵌套的ifs进行切换。

编辑:为了使这一点更清晰,当你发现自己在同一个变量上使用多个ifs时,最好使用swicth:

if ($var < 3)
{
    // do this
}
elseif ($var < 6)
{
    // do that
}
else
{
   // do something other
}

写得好多了:

switch ($var)
{
    case < 3:
        // do this
        break;
    case < 6:
        // do that
        break;
    default:
        // do somehting other
}