php double if语句

时间:2015-01-21 20:20:05

标签: php if-statement

我是学习如何编程的新手。而且我想知道最好的方法是处理你有一个双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))。

4 个答案:

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