我希望有人知道为什么我得到以下输出,因为我期待别的东西。
$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"
答案 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一起使用。
基本上,它使用的是==
运算符,而不是===
运算符。
如果您将数字与字符串进行比较或比较涉及 数字字符串,然后每个字符串转换为一个数字和 比较数字化。
这些规则也适用于交换机 言。
答案 3 :(得分:1)
在进行比较“$ x = 0”时,$ x会自动转换为整数。您可能希望使用if/else if
结构,并使用$x === 0
进行比较。 ===
表示“严格等于”。