PHP开关案例默认

bet*_*eth 6 php default switch-statement

如果之前有匹配的情况,是否会对switch语句的默认值进行评估?

例如:

switch ($x) {
  case ($x > 5): print "foo";
  case ($x%2 == 0): print "bar";
  default: print "nope";
}
Run Code Online (Sandbox Code Playgroud)

所以对于x = 50,你会看到foobar,或foobarnope

spe*_*593 6

是的,如果没有"中断",则将case执行第一次匹配后的所有操作.控制流将"落后"所有后续操作case,并在每个后续操作下执行所有操作case,直到break;遇到语句,或者直到switch达到语句结束.

在您的示例中,如果$ x的值为50,您实际上会看到"nope".

请注意,switch实际上是在switch关键字后面的表达式和case关键字后面的每个表达式之间执行简单的相等性测试.

你的例子很不寻常,因为它只会"foo"在$ x的值为0时显示.(实际上,当$ x的值为0时,你会看到的是"foo bar nope".)

case评估关键字后面的表达式,在您的示例中,示例返回0(如果条件测试为false)或1(如果条件测试为true).而且它是值(0或1)switch将比较$x.


Pee*_*Haa 5

如果之前有匹配的情况,是否会对switch语句的默认值进行评估?

在大多数情况下case它不应该,因为你经常会break在那里.但是在你的情况下,它也会去default.

另外请尽量防止这些单行内容(为了便于阅读):

$x = 10;

switch (true) {
  case ($x > 5):
      print "foo";

  case ($x%2 == 0):
      print "bar";

  default:
      print "nope";
}
Run Code Online (Sandbox Code Playgroud)

会打印foobarnope.所以回答你的问题:是的:-)