在PHP开关中转到另一个案例

时间:2013-11-11 21:13:22

标签: php switch-statement

例如我有这个:

switch ($action)
{
    case 'my_action':
        doSomething();
    break;

    case 'second_action':
        if ($this_is_true)
        {
            $action = 'my_action';
        }
        else
        {
            doSomethingElse();
        }
    break;
}

如果第二种情况my_actionsecond_action变量设置为true,上面的示例是否会再次通过切换,然后调用第一个案例$this_is_true

如果这不起作用,会有什么替代方案?

3 个答案:

答案 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所需的位置! 但是这段代码并不漂亮......可能你最好重构你的代码。