PHP开关和if语句输出不同的结果
有人能解释一下这是怎么回事吗? 代码如下:PHP开关和if语句输出不同的结果,php,conditional-statements,Php,Conditional Statements,有人能解释一下这是怎么回事吗? 代码如下: $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为正 if($num==0){ print ($num." is ZERO
$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为正
if($num==0){
print ($num." is ZERO");
}
elseif($num>0){
echo $num , " is POSITIVE";
}
else{
echo $num , " is NEGATIVE";
}
这与预期的一样-0为零。
如果我替换
case($num==0)和case(0)输出正常
为什么案例($num==0)失败?
有人告诉我在case语句中计算多个表达式的问题,但在语法上似乎没有问题。
switch
将switch(…)
表达式中的所有内容与每个case进行比较:
switch ($num) {
case 0 :
...
case 1 :
...
...
}
您不需要编写案例$num==0
,因为这相当于如果($num==0==num)
如果有的话,你必须做:
switch (true) {
case $num == 0 :
...
case $num > 0 :
...
...
}
但也有人对此表示不满。交换运算符的逻辑结构如下:
switch($x):
case val1:
action 1;
break;
case val2:
action 2;
break;
default:
not val1 and val2;
开关将$x与其中一个值进行比较,或者在没有匹配项的情况下给出默认值
分支。所以,你不能写:
case ($num > 0):
或
在您的案例中,它给出了正的结果,因为php首先计算案例中的表达式,我们在输出中得到以下结果:
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";
}
输出为:正。switch
不仅仅是if
语句的替代语法:您将实际开关($num)
的$num
值与($num==0)
,($num>0)
的值进行匹配,后者实际上是两个布尔值;因此,将假0与布尔真或假进行比较(在类型转换之后)
$num = 0;
switch($num){
case 1:
echo $num , " is ZERO";
break;
case 0:
echo $num , " is POSITIVE";
break;
default:
echo $num , " is NEGATIVE";
}