我有一个开关的形式:
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;
}