Php 是否替换嵌套的IF?

Php 是否替换嵌套的IF?,php,if-statement,Php,If Statement,有时主要是为了处理用户输入,我发现自己使用了许多相互嵌套的IF语句,有时比下面的语句多得多,从屏幕左侧的IF到屏幕右侧的IF数字10 这很难读取和排除故障,是否有其他方法来执行嵌套if 我知道开关,但在这种情况下,我必须在第三个if中执行查询,而不是第一个if if (true) { if (true) { if (true) { ... echo "You are logged in"; } else { echo "

有时主要是为了处理用户输入,我发现自己使用了许多相互嵌套的IF语句,有时比下面的语句多得多,从屏幕左侧的IF到屏幕右侧的IF数字10

这很难读取和排除故障,是否有其他方法来执行嵌套if

我知道开关,但在这种情况下,我必须在第三个if中执行查询,而不是第一个if

if (true) {

  if (true) {

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

  } else {
     echo "incorrect email";
  }

}
我假设你的真条件是真条件,而不仅仅是真布尔常数

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

通常情况下,我会采用失败策略:

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个if语句

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

if(is type a) {
   dostuff1();
} else if(is type b) {
   dostuff2();
}
对于类和继承:

 class->dostuff();
还可以使用第一类函数来避免if语句

假设您有值$\u POST['page']=='page1',$\u 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

比较一下:

if ($true1) {
   if ($true2) {
      if ($true3) {
         ...
为此:

if ($true1 && $true2 && $true3) {
   ...
}
第一种方法不仅浪费了有用的空间,还浪费了一个IF, 你也在推迟不可避免的事情:在晚些时候进行优化

此外,如果将IFs放置为嵌套或 因为PHP intepreter将停止检查beyond,如果它发现
错误。

此处讨论的各种技术:无法使用此功能,因为首先我需要在运行查询之前查看登录表单是否已发布,然后我需要查看电子邮件格式是否正确,然后我才运行查询并根据查询输出消息