-1

我有以下形式的开关:

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

我希望能够有这样的休息条件:

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

简单来说,当$skipbreak == true我希望代码通过 saveTemp 案例进入 save 案例时。

可能吗?

谢谢。

4

3 回答 3

2

很可能你不会做我要告诉你的事情。至少暂时不会,然后当您重新审视您的这个问题时(偶然),您会意识到我的回答是正确的。

不要将 if 块嵌套在 switch 块中,甚至不要将 switch 块嵌套在 switch 块中。两者都是代码异味,表明您的代码违反了 SRP(单一责任原则)。这意味着代码的这个特定部分同时负责太多不同的事情。

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

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

于 2013-03-12T21:09:31.160 回答
1

是的,这是可能的,你刚刚做到了。但是,您想要这样做并没有任何意义。哦,是的,就像 nickb 说的那样,你需要像这样否定你的跳过逻辑:

if(!$skipBreak)
    break;

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

于 2013-03-12T20:53:04.640 回答
0

您还可以在 switch case 中嵌套 switch case,如下所示:

$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;
}
于 2013-03-12T21:00:45.180 回答