有人可以解释一下这里发生了什么吗? 这是代码:
$num = 0;
switch($num){
case ($num==0):
echo $num , " is ZERO";
break;
case ($num>0):
echo $num , " is POSITIVE";
break;
default:echo $num , " is NEGATIVE";
}
以上输出0为POSITIVE
if($num==0){
print ($num." is ZERO");
}
elseif($num>0){
echo $num , " is POSITIVE";
}
else{
echo $num , " is NEGATIVE";
}
这按预期工作 - 0是零。 如果我更换 case($ num == 0)with case(0)输出正常。
为什么案例($ num == 0)失败? 有人告诉我在case语句中评估多个表达式的问题,但它在语法上似乎很好。
答案 0 :(得分:1)
switch
将switch (...)
表达式中的所有内容与每种情况进行比较:
switch ($num) {
case 0 :
...
case 1 :
...
...
}
您不会写case $num == 0
,因为它等同于if ($num == 0 == $num)
。
如果有的话,你必须这样做:
switch (true) {
case $num == 0 :
...
case $num > 0 :
...
...
}
但也有人对此不以为然。
答案 1 :(得分:1)
switch运算符的逻辑结构如下:
switch($x):
case val1:
action 1;
break;
case val2:
action 2;
break;
default:
not val1 and val2;
switch将$ x与其中一个值进行比较,或者在没有匹配的情况下给出default
分支。所以,你不能写:
case ($num > 0):
或
case ($num == 0 ):
在你的情况下它给出了POSITIVE,因为php首先评估case中的表达式,并且我们在输出中得到以下内容:
Is $num == 0 ?: yes => 1
Is $num > 0 ?: no => 0
真正的开关php评估是这样的:
$num = 0;
switch($num){
case 1:
echo $num , " is ZERO";
break;
case 0:
echo $num , " is POSITIVE";
break;
default:
echo $num , " is NEGATIVE";
}
输出为:积极。