我希望有人知道为什么我会得到下面的输出,因为我期待的是其他东西。
$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"发布于 2011-08-14 21:39:28
手册says
请注意,开关/大小写进行松散比较。
它将首先检查NULL == "0"是否不是"0",如果字符串为NULL,则为false。
作为整数的NULL是0,因此将匹配-打印整数。
对于6,它将大小写转换为整数- "6b"将变为等于的6。
所以这是因为:
NULL != "0";
NULL == 0;
"6b" == 6;发布于 2011-08-14 21:37:46
注意:
请注意,switch/case进行松散比较。
http://php.net/manual/en/control-structures.switch.php
所以不是像这样做比较:你使用$x == 0:$x === 0
发布于 2011-08-14 21:39:33
switch/case所做的比较适用于类型杂耍。
基本上,它使用==运算符,而不是===运算符。
如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字,并以数字形式执行比较。
这些规则也适用于switch语句。
https://stackoverflow.com/questions/7057100
复制相似问题