[英]PHP statement switch case etiquette
1
switch($app_id){
case (
$app_id == 1 ||
$app_id == 2
):
//do something
break;
case 3:
//do something else
break;
}
和
2
switch($app_id){
case 1:
case 2:
//do something
break;
case 3:
//do something else
break;
}
除了礼节,有没有更好的理由让你不做第二个,或者完全取决于你?
我问的原因是因为在 php.net 中它说你不应该做后者,无论你是否愿意(来自 php.net 的片段说你不应该在没有中断的情况下做案例,无论你是否想要堆叠查询或不是) :
<?php
switch ($i) {
case 0:
echo "i equals 0";
case 1:
echo "i equals 1";
case 2:
echo "i equals 2";
}
?>
在这里,如果 $i 等于 0,PHP 将执行所有的 echo 语句! 如果 $i 等于 1,PHP 将执行最后两个 echo 语句。 只有当 $i 等于 2 时,您才会得到预期的行为(将显示“i 等于 2”)。因此,重要的是不要忘记 break 语句(即使在某些情况下您可能希望避免有意提供它们) )。
到目前为止的原因:
回答:如果我省略了一个中断以允许一个失败,我会发表评论说发生了一个失败,这样下一个出现的人就不会“啊哈!错过了休息!BOOM” –马克·B
我的评论:很好的理由马克! 这是礼仪的流浪汉......如果你打破它,人们还没有准备好被他们队长的正确性所欺骗。
答案: @JamesT:您所阅读的内容只会警告您不要错误地忘记它,因为这是一个非常常见的编程错误。 如果它是有意的,你可以做到。 ——宇智波斑
我的评论:我认为礼仪胜过这个问题。 一定要打断,因为这可能会让下一个人编辑你的代码感到困惑; 唉,如果你足够明智,可以发表评论来解释你打算错过它,那就去做吧
回答:你错过了理解他们的情绪。 他们谈论的是在每种情况下都有单独的操作时省略中断,例如我的第一个示例。 对案例进行分组,例如我的示例一中的 4 和 5,如果操作完全跨案例共享,则完全可以并且鼓励。 – 罗科德
我的评论:我同意这句话可能被误读。 除了让未来的开发人员怀疑您是否有意放弃突破之外,我认为没有任何理由。
好吧,您的第一个示例可能不会按照您期望的方式运行。
switch($app_id){
case (
$app_id == 1 ||
$app_id == 3
):
//do something
case 3:
//do something else
break;
}
这将评估条件并解析为TRUE
或FALSE
值,然后将其与$app_id
进行比较。 在这种(非常具体的)情况下,您将获得预期的结果,但这不是正确的做法! .
使用 switch case 时,您展示的第二种方法更好。
break 语句用于在满足后退出案例。 您可以省略它,并执行所有后续案例。 如果这是预期的行为,那么以这种方式实现它是非常好的。 不要忘记添加注释以澄清它。 善待未来的你!
下面的 switch 和if($i == 1 || $i == 2 || $i == 3)
switch($i) {
case 1:
echo "1";
case 2:
echo "2";
case 3:
echo "3";
break;
}
假设 $i == 1,上面的代码实际上会输出“123”——这通常是不正确的。
正确示例:
if ($i == 1) // Do something
else if ($i == 2) // Do something else, etc
是相同的
switch(i) {
case 1:
echo "1";
break;
case 2:
echo "1";
break;
case 4:
case 5:
echo "This is 4 and 5";
break;
}
上面的代码只会为 $i == 1 输出 "1"
有些人确实将他们的案例包含在 {} 中,但这纯粹是为了可读性,不会强制中断。
关于您的case (4 || 5)
- 这将导致语法错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.