1

以下 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;
}
?>

顺便说一句,“游行”案件也是如此……?

4

3 回答 3

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)

阅读类型杂耍显然 switch使用松散的比较

注意:
请注意 switch/case 确实比较松散

于 2013-03-26T12:11:56.697 回答
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 使用简单的 == 将变量的值与每种情况下的值进行比较。

于 2013-03-26T12:14:35.997 回答
0

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

于 2013-03-26T12:15:14.123 回答