-1

我们来看看下面的代码:

if ($a == 1) {
    echo "this is stage 1";
} 
else if ($a == 2) {
    echo "this is stage 2";
}
else if ($a == 3) {
    $a = 1;
    // at this point I want something that restarts the if-else construct so
    // that the output will be "this is stage 1"
}

我目前正在研究 if else 构造,假设我有三个阶段,if-else 构造检查我处于哪个阶段。

现在恰好第 3 阶段中的一些活动导致跳回第 1 阶段。现在我已经通过了第 1 阶段的代码,这就是为什么我想以某种方式重新启动 if-else 构造。有没有办法做到这一点?更重要的是:有没有更好的方法来做我想做的事?因为我的想法似乎不是很好的做法。

4

6 回答 6

2

你是对的,这是不好的做法。

你要求goto.

例子:

<?php
goto a;
echo 'Foo';

a:
echo 'Bar';

以上永远不会输出'Foo'

如果不确切了解您要做什么,就很难提出更好的方法,但请考虑转换。

switch ($a) {

 case 3:
    // Execute 3 stuff
    // No break so it'll continue to 1
 case 1:
   // Execute 1 stuff
   break // Don't go any further
 case 2:
    // 2 stuff
    break; 


}

这可能也不是你想要的。

您可能只想将代码抽象为函数并在必要时多次调用它们。

于 2013-02-01T00:48:08.360 回答
2

你可以在你的 if 周围设置一个无限循环,如果你完成了就打破

while (1) {
    if ($a == 1) {
        echo "this is stage 1";
        break;
    } 
    else if ($a == 2) {
        echo "this is stage 2";
        break;
    }
    else if ($a == 3) {
        $a = 1;
    }
    else {
        break;
    }
}

也许你想看看维基百科 - Finite-state machine and this question PHP state machine framework

于 2013-02-01T00:48:11.943 回答
1

简短的回答是肯定的,有办法,但更好的答案是对你的第二个问题也是肯定的。

至少,放置可以从函数中的多个位置调用的代码。例如,

function stageOneCode() {
    //do stuff;
}

等等。我会为每个阶段推荐一个功能,但是如果没有实际看到阶段中正在执行的内容,就很难提出建议。

无论如何,在您的第三阶段函数结束时,只需调用您的第一阶段函数。

于 2013-02-01T00:46:43.357 回答
0

循环是您要搜索的内容:

// initialize $a 
$a = 1;

// the while loop will return endless
while (true);

    // if you want to break for any reason use the 
    // break statement:

    // if ($whatever) {
    //    break;
    // }

    if ($a == 1) {
        echo "this is stage 1";
    }
    else if ($a == 2) {
        echo "this is stage 2";
    }
    else if ($a == 3) {
        $a = 1;
        // continue will go back to the head 
        // of the loop (step 1) early:
        continue;
    }

    // don't forget to increment $a in every loop
    $a++;
}
于 2013-02-01T00:49:00.907 回答
0

递归函数对此很有帮助(但如果它总是恢复为 1 可能会有点过分)

function echo_stage($stage) {
    if ($a == 1) {
        return "this is stage 1";
    } 
    else if ($a == 2) {
        return "this is stage 2";
    }
    return echo_stage(1);
}

echo echo_stage(5);

或者:

switch ($number)
{
    case 2 :
        echo "this is stage 2";
        break;
    case 1:
     default:
        echo "this is stage 1"
}
于 2013-02-01T00:47:19.537 回答
0

使用switch()。您可以有“默认”案例以及特定案例。

于 2013-02-01T00:47:19.983 回答