在PHP中切换条件中断

时间:2013-03-12 20:51:38

标签: php

我有一个以下形式的开关:

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

我希望能够像这样在休息时有条件:

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

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

有可能吗?

感谢。

3 个答案:

答案 0 :(得分:1)

是的,这是可能的,你刚才做到了。但是你想要这样做真的没有意义。哦,是的,就像尼克说的那样你需要否定你的跳过逻辑:

if(!$skipBreak)
    break;

您应该考虑使用if-else块而不是switch语句。见When to use If-else if-else over switch statments and vice versa

答案 1 :(得分:1)

很可能你不会做我要告诉你的事情。至少不会有一段时间,然后当你再次回顾你的这个问题时(偶然),你会意识到我的答案是正确的。

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

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

如果您使用PHPLOC或类似的度量工具,您还会发现代码的圈复杂度会随着您按照建议进行重构而下降,您也可能会看到性能提升。

答案 2 :(得分:0)

您还可以将开关盒嵌套在开关盒中,如下所示:

$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;
}