有关php中切换条件的问题

时间:2011-08-14 13:34:22

标签: php comparison switch-statement

我希望有人知道为什么我得到以下输出,因为我期待别的东西。

$x = NULL;
switch ($x) {
    case "0": 
        echo "String"; 
        break;
    case 0: 
        echo "Integer"; 
        break;
    case NULL: 
        echo "NULL"; 
        break;
    case FALSE: 
        echo "Boolean"; 
        break;
    case "": 
        echo "Empty string"; 
        break;
    default: 
        echo "Something else"; 
        break;
}
// outputs "Integer" was expecting "NULL"

$x=6;
switch ($x) {
    case "6b": 
        echo "6b"; 
        break;
    case "6": 
        echo "6 empty"; 
        break;
    case 6: 
        echo "6 full"; 
        break;
    default: 
        echo "6 half";
        break;
}
// outputs "6b" was expecting "6 empty"

4 个答案:

答案 0 :(得分:5)

手册says

  

请注意,开关/外壳的比较松散。

首先会检查NULL == "0"作为字符串的NULL是否为"0"是不是NULL

0整数为6,因此匹配 - 打印整数。

对于"6b",它会将案例转换为整数 - 6将变为NULL != "0"; NULL == 0; "6b" == 6; ,这是相同的。

所以这是因为:

{{1}}

答案 1 :(得分:2)

注意:

请注意,开关/外壳的比较松散。

http://php.net/manual/en/control-structures.switch.php

所以不要像$x === 0那样进行比较,而是进行$x == 0

答案 2 :(得分:2)

switch / case进行的比较与类型jugling一起使用。

基本上,它使用的是==运算符,而不是===运算符。


引用Comparison Operators

  

如果您将数字与字符串进行比较或比较涉及   数字字符串,然后每个字符串转换为一个数字和   比较数字化。
这些规则也适用于交换机   言。

答案 3 :(得分:1)

在进行比较“$ x = 0”时,$ x会自动转换为整数。您可能希望使用if/else if结构,并使用$x === 0进行比较。 ===表示“严格等于”。