0

例如我有这个:

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 ,上面的示例是否会再次通过开关,然后调用第一种情况?

如果这不起作用,还有什么替代方法?

4

3 回答 3

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句子,所以它将遍历第二种情况,直到找到break句子。

请查看http://php.net/manual/en/control-structures.switch.php中的示例 #3以了解更多关于不破坏开关盒的信息。

于 2013-11-11T21:16:10.417 回答
1

不,不会的。只需调用doSomething();“second_action”案例即可。

在这种简单的情况下,我不会使用开关,但如果它很长,那么可能:

$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(); }
于 2013-11-11T21:15:10.933 回答
-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_truefalse需要的地方!但是这段代码并不漂亮......也许你最好重构你的代码。

于 2013-11-11T21:43:30.000 回答