在PHP中切换条件中断


conditional break on switch in php

我有一个开关的形式:

1
2
3
4
5
6
switch ($action) {
case 'saveTemp':
break;
case 'save':
break
}

我想在休息时有这样的条件:

1
2
3
4
5
6
7
8
switch ($action) {
case 'saveTemp':
    if ($skipbreak) {
        break;
    }
case 'save':
break
}

简单来说,当$skipbreak == true时,我希望代码从savetemp案例转到save案例。

有可能吗?

谢谢。


很可能你不会按我说的去做。至少有一段时间没有,后来当你(偶然)重新审视你的这个问题时,你会发现我的回答是正确的。

开关块内不嵌套,开关块内也不嵌套。这两者都是代码味道,表明您的代码违反了SRP(单一责任原则)。这意味着代码的这个特定部分同时负责太多不同的事情。

在代码层次结构中向上一个级别或可能不止一个级别,并找到可以删除特定功能的特定任务的位置。也许你意识到你需要在一个类中封装一组函数。突然间,你意识到你不再需要嵌套的控制块了。

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


是的,这是可能的,你刚刚做到了。不过,你真的不想这么做。哦,是的,就像尼克说的,你需要否定你的跳跃逻辑,就像这样:

1
2
if(!$skipBreak)
    break;

您应该考虑使用if-else块而不是switch语句。查看何时使用if else,if else,over switch stations,反之亦然。


您还可以按如下方式在开关盒中嵌套开关盒:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$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;
}