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 } |
简单来说,当
有可能吗?
谢谢。
很可能你不会按我说的去做。至少有一段时间没有,后来当你(偶然)重新审视你的这个问题时,你会发现我的回答是正确的。
开关块内不嵌套,开关块内也不嵌套。这两者都是代码味道,表明您的代码违反了SRP(单一责任原则)。这意味着代码的这个特定部分同时负责太多不同的事情。
在代码层次结构中向上一个级别或可能不止一个级别,并找到可以删除特定功能的特定任务的位置。也许你意识到你需要在一个类中封装一组函数。突然间,你意识到你不再需要嵌套的控制块了。
如果您使用phploc或类似的度量工具,您还将认识到,当您按照建议重构代码时,代码的圈复杂度会降低,您可能还会看到性能的提高。
是的,这是可能的,你刚刚做到了。不过,你真的不想这么做。哦,是的,就像尼克说的,你需要否定你的跳跃逻辑,就像这样:
1 2 | if(!$skipBreak) break; |
您应该考虑使用
您还可以按如下方式在开关盒中嵌套开关盒:
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; } |