为什么所有case语句在匹配条件之后在switch case中执行,而不使用break;用PHP

时间:2014-07-06 08:20:21

标签: php switch-statement case-statement

您好我能理解这里发生了什么,但想知道目的,

在这个开关案例陈述中

<?php
switch(1) {
case 1: print("Book Details<br />");
case 2: print("Book Author<br />");
default: print("Missing Book<br />");
}
?> 

结果是

Book Details
Book Author
Missing Book

我的预期结果是

Book Details
Missing Book

我的问题是

*在switch语句中我们正在检查switch(1),那么如何执行case 2:  默认应该打印,我可以理解。 这有什么特别的理由吗?

请提前解释,谢谢。

3 个答案:

答案 0 :(得分:1)

阅读Example #2

之后的文档段落
  

了解如何执行switch语句非常重要   为了避免错误。 switch语句逐行执行   (实际上,声明中的声明)。一开始,没有代码   执行。仅当找到具有值的case语句时   匹配PHP表开始执行的switch表达式的值   声明。 PHP继续执行语句直到结束   切换块,或第一次看到break语句。如果   你不要在案件陈述的末尾写一个破产陈述   列表,PHP将继续执行以下案例的陈述。

然后按照3个示例显示break的效果和default

的作用

答案 1 :(得分:1)

就像你在问题中提到的那样,它取决于break语句。原因可能是某人希望有两个或更多个案例具有相同的结果而另一个案例具有不同的结果。

类似的东西:

<?php
switch($aVar) {
case 1:
case 2: print("Both cases show this sentence");
        break;
case 3: print("This case shows a different one.");
        break;
default:
        print("No matching case");
        break;
}
?>

答案 2 :(得分:0)

这已经知道了。由于缺少 break 语句,PHP继续执行语句,直到switch块结束。 因此,您应该使用以下格式的开关案例:

switch (n) {
 case label1:
   code to be executed if n=label1;
   break;
  case label2:
    code to be executed if n=label2;
    break;
 case label3:
    code to be executed if n=label3;
    break;
 default:
    code to be executed if n is different from all labels; 
} 

使用break来防止代码自动运行到下一个案例中。