Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP开关和if语句输出不同的结果_Php_Conditional Statements - Fatal编程技术网

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";
}