嵌套IF的替换?

时间:2013-05-08 20:24:24

标签: php if-statement

有时主要是为了处理用户输入,我发现自己使用了大量相互嵌套的IF语句,有时它远远超过下面,从屏幕左侧到右侧的if数字10。屏幕的一面。

这很难阅读和排除故障,是否有其他方法可以嵌套if?

我知道switch()然而在这种情况下我必须在第三个而不是第一个进行查询。

if (true) {

  if (true) {

     if (true) {
        ...
        echo "You are logged in";
     } else {
        echo "login failed"
     }

  } else {
     echo "incorrect email";
  }

}

4 个答案:

答案 0 :(得分:7)

我假设您的true条件是真实条件,而不仅仅是true布尔常量。

if (condition1 && condition2 && condition3) {
    echo "You are logged in";
} else {
    echo "login failed";
}

如果您需要单独处理的条件:

if (emailAddressIsCorrect) {
  if (condition2 && condition3) {
    echo "You are logged in";
  } else {
    echo "login failed";
} else {
 echo "incorrect email";
}

或者你可以早点回来,我觉得这更干净。如果您愿意,可以针对每种情况执行此操作。通过这种安排,您可以拥有任意数量的条件,而无需条件嵌套:

if (!emailAddressIsCorrect) {
  echo "incorrect email";
  return;
}

答案 1 :(得分:1)

我经常会做“失败”策略:

function login() {
    if (!condition1) {
        echo "incorrect email";
        return false;
    }

    if(!condition2) {
        echo "incorrect password";
        return false;
    }

    if(condition3) {
       echo "logged in successfully!";
       return true;
    }

    return false;
}

这个例子很可疑,安全问题让攻击者知道登录的哪一部分失败,但作为代码片段,你可以看到策略。

答案 2 :(得分:0)

使用“&&”结合2个if语句。

OR

有时使用面向对象编程可以避免使用if语句:

if(is type a) {
   dostuff1();
} else if(is type b) {
   dostuff2();
}

使用类和继承:

 class->dostuff();

你也可以使用“头等函数”来避免if语句。

假设你有价值$ _POST ['page'] =='page1',$ _POST ['page'] =='page2'

$functions = array("page1"=>$function1, "page2"=>$function2);

function dostuff1() {
return 'a';
}
function dostuff2() {
return 'b';
}

$function1 = "dostuff1";
$function2 = "dostuff2";

$functions[$_POST['page']](); 

而不是

if($_POST['page'] == '1') dostuff1(); 
等等......虽然这种方法有些可怕...... lol

答案 3 :(得分:0)

比较一下:

if ($true1) {
   if ($true2) {
      if ($true3) {
         ...

用这个:

if ($true1 && $true2 && $true3) {
   ...
}

第一个应用程序不仅仅是浪费单个IF的有用空间, 你也在推迟不可避免的事情:在晚些时候进行优化

此外,如果您将IFs置于嵌套状态,则无论是<等性能
在一行中,因为如果找到,PHP解释器将停止检查
a FALSE