switch ($foo)
{
case 3 || 5:
bar();
break;
case 2:
apple();
break;
}
在上面的代码中,第一个 switch 语句是否有效?如果
$foo
的值为 3 或 5,我想调用函数 bar()
。switch ($foo)
{
case 3 || 5:
bar();
break;
case 2:
apple();
break;
}
$foo
的值为 3 或 5,我想调用函数 bar()
。你应该利用 switch 语句的“穿透”效果:
switch ($foo)
{
case 3:
case 5:
bar();
break;
case 2:
apple();
break;
}
就像这样,PHP手册中也有一些类似的例子。
我认为你需要的是:
switch ($foo)
{
case 3:
case 5:
bar();
break;
case 2:
apple();
break;
}
有趣的是,我听说Perl正在引入这种语法(也许现在已经有了),例如:
if ($a == 3 || 5)
我不是那种很喜欢这种语法的人,因为我写过很多词法解析器,而且我认为语言应该尽可能地不含歧义。但是,Perl以前已经用那些可怕的尾部if
和or
解决了所有这些问题,所以我猜这个也不会有问题 :-)
相反,使用switch语句的主要优势之一:
switch($foo) {
case 3:
case 5:
bar();
break;
case 2:
apple();
break;
}
是的,我认为你那里的代码等同于:
<?php $foo = 5000 ;
switch( $foo ) { case true : // Gzipp: 这里使用了“==”风格的比较 echo '第一个' ; // 比较 $foo 和 case 中的值 break; // 所以对于“真实”的 $foo 值,你总是会得到这个结果。
case 2: echo '第二个'; break;
default: echo '都不是' ; break; }
?>
case true:
这一行不总是会被执行。每个 case 值都会与 switch 值进行宽松比较;如果它解析为 true,则会执行代码。因此,如果 $foo 是 0、'' 或任何其他宽松解析为 false 的值,则该 case 将被跳过。 - GZippcase 3 || 5:
,那么你最好直接写case True:
,这肯定不是你想要的。但是你可以将case语句直接放在彼此下面:
switch ($foo) { case 3: case 5: bar(); break;
case 2: apple(); break; }
3 || 5
似乎会被计算为true
,因此无论$foo
的值是什么,它都将始终调用bar()
。 - Mark Rushakoff