我们来看看以下代码:
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阶段。现在我已经传递了第一阶段的代码,这就是为什么我想以某种方式重新启动if-else结构。有没有办法做到这一点?更重要的是:有没有更好的方法来做我想要的?因为我的想法似乎不是好的做法。
答案 0 :(得分:2)
你是对的,这是一种不好的做法。
您要求goto
。
示例:
<?php
goto a;
echo 'Foo';
a:
echo 'Bar';
以上内容永远不会输出Foo&#39;
如果没有准确了解您尝试做的事情,建议使用更好的方法很困难,但请考虑转换。
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;
}
这可能不是你想要的。
您可能只想将代码抽象为函数,并在必要时多次调用它们。
答案 1 :(得分: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;
}
}
也许您想查看Wikipedia - Finite-state machine和此问题PHP state machine framework
答案 2 :(得分:1)
简短的回答是肯定的,有一种方法,但对你的第二个问题,更好的答案是肯定的。
至少,可以从函数中的多个位置调用代码。例如,
function stageOneCode() {
//do stuff;
}
等。我会为每个阶段推荐一个功能,但是如果没有真正看到阶段中正在执行的内容,很难提出建议。
无论如何,在你的第三阶段功能结束时,只需调用你的第一阶段功能。
答案 3 :(得分: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"
}
答案 4 :(得分:0)
使用switch()。你可以有一个&#34;默认&#34;案件以及具体案件。
答案 5 :(得分: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++;
}