php中开关的条件中断


conditional break on switch in php

我有一个开关的形式:

switch ($action) {
case 'saveTemp':
break;
case 'save':
break
}

我希望能够像这样有一个break的条件:

switch ($action) {
case 'saveTemp':
    if ($skipbreak) {
        break;
    }
case 'save':
break
}

简单地说,当$skipbreak == true时,我希望代码从saveTemp情况下降到save情况。

有可能吗?

谢谢。

很可能你不会照我说的去做。至少暂时不会,然后当你(偶然地)重新审视这个问题时,你就会意识到我的答案是正确的。

不要在开关块中嵌套开关块,甚至不要在开关块中嵌套开关块。两者都是一种代码气味,表明你的代码违反了SRP(单一责任原则)。这意味着你的代码的这一部分同时负责太多不同的事情。

在你的代码层次结构中向上走一层或可能不止一层,并找到可以将某些任务委派给特定功能的地方。也许您意识到需要在类中封装一组函数。突然间,你意识到你不再需要嵌套的控制块了。

如果您使用PHPLOC或类似的度量工具,您还会意识到,当您按照建议重构代码时,代码的圈复杂度会降低,并且您可能还会看到性能的提高。

是的,这是可能的,你刚刚做到了。然而,你想这么做是没有意义的。哦,是的,就像nickb说的,你需要否定你的跳过逻辑,像这样:

if(!$skipBreak)
    break;

您应该考虑使用if-else块而不是switch语句。参见何时在switch语句上使用If-else,反之亦然

您还可以在一个开关案例中嵌套一个开关案例,如下所示:

$action = 'saveTemp'; // Example using saveTemp
$skipbreak = TRUE;    // Example using TRUE
switch ($action) {
    case 'saveTemp':
    switch ($skipbreak) {
        case TRUE:
        echo 'this is True';
        break;
        case FALSE:
        echo 'this is FALSE';
        break;
    }
    break;
    case 'save':
    echo 'this is save';
    break;
}