滚动到 PHP 开关中的另一个案例


Roll to another case in PHP switch

例如,我有这个:

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!但是这段代码并不漂亮...也许你最好重构你的代码。