例如,我有这个:
switch ($action)
{
case 'my_action':
doSomething();
break;
case 'second_action':
if ($this_is_true)
{
$action = 'my_action';
}
else
{
doSomethingElse();
}
break;
}
上面的示例是否会再次通过开关,然后调用第一种情况my_action
如果第二种情况second_action
$this_is_true
变量设置为 true?
如果这不起作用,还有什么替代方案?
你可以尝试这样的事情:
switch ($action)
{
case 'my_action':
case 'second_action':
if ($this_is_true || $action=='my_action')
{
doSomething();
}
else
{
doSomethingElse();
}
break;
}
当$action等于'my_action'
时,它将贯穿case
,因为它没有找到break
句子,那么它将运行第二种情况,直到找到break
句子。
请查看 http://php.net/manual/en/control-structures.switch.php 中的示例 #3,以了解有关无断路开关案例的更多信息。
不,
它不会。 只需在"second_action"的情况下调用doSomething();
即可。
在这个简单的情况下,我不会使用开关,但如果它很长,那么也许:
$do = false;
switch ($action)
{
case 'my_action':
$do = true;
break;
case 'second_action':
if ($this_is_true)
{
$action = 'my_action';
$do = true;
}
else
{
doSomethingElse();
}
break;
}
if($do) { doSomething(); }
尝试这样做:
do {
switch ($action)
{
case 'my_action':
$this_is_true = false;
doSomething();
break;
case 'second_action':
if ($this_is_true)
{
$action = 'my_action';
}
else
{
doSomethingElse();
}
break;
}
} while($this_is_true);
不要忘记将$this_is_true
切换到需要的地方false
!但是这段代码并不漂亮...也许你最好重构你的代码。