PHP开关进入案例0:即使有一个有效的案例?

时间:2013-03-26 12:08:49

标签: php

以下switch case语句应该执行case“january”的值:但是它正在执行case 0的值:是否有人可以告诉我它为什么这样做? 代码:

<?php
$a = "january";
switch ($a)
{
    case 0:
    case 3:
        echo "The value is either 0 or 3";
        break;
        echo "0/2";
        break;
    case "january":
        echo "january";
        break;
    case "march":
        echo "The value is ";
        break;
    case 2:
        echo "The value is 2";
        break;
    default:
        echo "Here is ur default message";
        break;
}
?>

顺便说一下,对于“游行”的情况也是如此....?

3 个答案:

答案 0 :(得分:8)

$a = 'january';

var_dump($a == 0);
var_dump($a === 0);
var_dump($a == '0');
var_dump($a === '0');

输出:

bool(true)
bool(false)
bool(false)
bool(false)

阅读Type JugglingApparently switch使用loose comparison

  

注意:
  请注意,switch / case执行loose comparision

答案 1 :(得分:1)

PHP存在一些可能导致此类行为的问题,在这种情况下,问题来自于您在Switch上使用不同类型的事实。

试试这段代码:

echo (0 == "january") ? "true\n" : "false\n"; // Echoes true

解决此问题的一种方法是在交换机上仅使用字符串,如下所示:

switch ($a)
{
    case "0":
    case "3":
        echo "The value is either 0 or 3";
        break;
        echo "0/2";
        break;
    case "january":
        echo "january";
        break;
    case "march":
        echo "The value is ";
        break;
    case "2":
        echo "The value is 2";
        break;
    default:
        echo "Here is ur default message";
        break;
}

这样可以正常工作,因为0 ==“0”但是“january”!=“0”

Switch使用simple ==将变量的值与每种情况下的值进行比较。

答案 2 :(得分:0)

您需要在数字周围加上引号。使用switch语句时,不能混合数字和字符串。