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)
手册说:
请注意,开关/外壳确实松动了比较.
它将首先检查NULL == "0"哪个是假的,NULL因为字符串不是"0".
NULL因为整数是0匹配的 - 打印整数.
对于6,它会将案例转换为整数 - "6b"将变为6相等.
所以这是因为:
NULL != "0";
NULL == 0;
"6b" == 6;
Run Code Online (Sandbox Code Playgroud)