期待您有以下情况:
$myVar = null;
switch($myVar) {
case is_int($myVar):
echo "i am an int";
break;
case null:
echo "i am null";
break;
default:
echo "failure";
}
结果是"我是一个int"。但我预计"我是空的"结果。
这是php(我的版本:5.5.11)中的错误还是自然行为?
答案 0 :(得分:2)
switch($myVar)
表示针对每个案例表达式测试$myvar
的值,直到找到匹配项。
is_int($myVar)
为空时, $myvar
返回布尔值false。
null
对布尔false
的宽松比较(null
将转换为布尔false
进行比较)返回true,所以案件被接受
您可以通过更改case语句的顺序来首先测试null case,但
道德:在案例陈述中使用表达式绝不是一个好主意
答案 1 :(得分:0)
为什么不使用gettype()
来识别变量的数据类型。
$myvar = null;
echo gettype($myvar)."\n";
$myvar = 1;
echo gettype($myvar)."\n";
$myvar = "a";
echo gettype($myvar);
<强> DEMO 强>