Php 是否替换嵌套的IF?
有时主要是为了处理用户输入,我发现自己使用了许多相互嵌套的IF语句,有时比下面的语句多得多,从屏幕左侧的IF到屏幕右侧的IF数字10 这很难读取和排除故障,是否有其他方法来执行嵌套if 我知道开关,但在这种情况下,我必须在第三个if中执行查询,而不是第一个ifPhp 是否替换嵌套的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 (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,如果它发现
错误。此处讨论的各种技术:无法使用此功能,因为首先我需要在运行查询之前查看登录表单是否已发布,然后我需要查看电子邮件格式是否正确,然后我才运行查询并根据查询输出消息