我是学习如何编程的新手。而且我想知道最好的方法是处理你有一个双if语句的问题,两者都有相同的Else结果。
以下面的双if语句为例。
if (isset($x)) {
$y = doSomething($x);
if ($y == "something") {
do result A;
}
else {
do result B;
}
}
else {
do result B;
}
多次写入结果B似乎不是一个明智的想法。 现在有哪些不同的方法可以防止多次写入结果B?
可以尝试制作1个if语句,但这似乎总是不可能的(例如,如果存在变量,则使用isset()进行检查)。
if (isset($x) && $y) { etc. }
还有哪些其他选择?
PS。我也打开其他建议来帮助改进我的代码,比如如何以更好的方式编写if(isset($ x))。
答案 0 :(得分:4)
if (isset($x) && doSomething($x) == "something") {
do result A;
}
else {
do result B;
}
或
$successful = false;
if (isset($x)) {
$y = doSomething($x);
if ($y == "something") {
$successful = true;
}
}
if ($successful) {
do result A;
} else {
do result B;
}
答案 1 :(得分:2)
if (isset($x) && doSomething($x) == 'something') {
// do result A;
}
else {
// do result B;
}
重要提示:只有在doSomething($x)
评估为真时才会计算isset($x)
。否则,直接中止检查条件,并执行else-branch。因此,如果doSomething($x)
未设置,您不必担心$x
会产生任何副作用。
我不确定这是否是记录在案的行为,但可以通过以下方式进行检查:
<?php
function checkSomething() {
echo "Look, I'm checking something!\n";
return true;
}
if (1 == 0 && checkSomething()) {
echo "if\n";
} else {
echo "else\n";
}
输出:
else
如果checkSomething()
已经过检查,则会输出if
以及echo
中的checkSomething()
。
答案 2 :(得分:0)
您可能希望使用三元运算符来设置$y
。
$y = (isset($x)) ? doSomething($x) : "some_other_value";
if ($y == "something")
{
do result A;
}
else
{
do result B;
}
如果设置了$x
,则会将doSomething($x)
返回的值放在$y
中,否则会指定其他值。然后,对$y
的值进行一次if语句。
答案 3 :(得分:0)
感谢您的帮助。
我发现以下是解决此问题的最简单,最明确的方法。现在结果B只写了一次而不是多次。特别是如果结果B变长,这使其易于阅读。
$failure = false;
if (isset($x)) {
$y = doSomething($x);
if ($y == "something") {
do result A;
} else {
$failure = true;
}
} else {
$failure = true;
}
if ($failure == true) {
do result B;
}