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,你会看到foo和bar,或foo和bar和nope?
是的,如果没有"中断",则将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.
如果之前有匹配的情况,是否会对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.所以回答你的问题:是的:-)
| 归档时间: |
|
| 查看次数: |
35851 次 |
| 最近记录: |