有关php中切换条件的问题

mad*_*s24 1 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"
Run Code Online (Sandbox Code Playgroud)

pim*_*vdb 5

手册:

请注意,开关/外壳确实松动了比较.

它将首先检查NULL == "0"哪个是假的,NULL因为字符串不是"0".

NULL因为整数是0匹配的 - 打印整数.

对于6,它会将案例转换为整数 - "6b"将变为6相等.

所以这是因为:

NULL != "0";
NULL == 0;

"6b" == 6;
Run Code Online (Sandbox Code Playgroud)