有时主要是为了处理用户输入,我发现自己使用了大量相互嵌套的IF语句,有时它远远超过下面,从屏幕左侧到右侧的if数字10。屏幕的一面。
这很难阅读和排除故障,是否有其他方法可以嵌套if?
我知道switch()然而在这种情况下我必须在第三个而不是第一个进行查询。
if (true) {
if (true) {
if (true) {
...
echo "You are logged in";
} else {
echo "login failed"
}
} else {
echo "incorrect email";
}
}
答案 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 。