例如我有这个:
switch ($action)
{
case 'my_action':
doSomething();
break;
case 'second_action':
if ($this_is_true)
{
$action = 'my_action';
}
else
{
doSomethingElse();
}
break;
}
如果第二种情况my_action
将second_action
变量设置为true,上面的示例是否会再次通过切换,然后调用第一个案例$this_is_true
?
如果这不起作用,会有什么替代方案?
答案 0 :(得分:2)
您可以尝试这样的事情:
switch ($action)
{
case 'my_action':
case 'second_action':
if ($this_is_true || $action=='my_action')
{
doSomething();
}
else
{
doSomethingElse();
}
break;
}
当$ action等于'my_action'
时,它将通过case
,因为它找不到break
句子,然后它将运行第二种情况,直到找到{{1}句子。
请查看http://php.net/manual/en/control-structures.switch.php中的示例#3,了解有关没有破坏切换案例的更多信息。
答案 1 :(得分:1)
不,不会。只需在“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(); }
答案 2 :(得分:-1)
尝试这样做:
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
所需的位置!
但是这段代码并不漂亮......可能你最好重构你的代码。