预计您有以下情况:
$myVar = null;
switch($myVar) {
case is_int($myVar):
echo "i am an int";
break;
case null:
echo "i am null";
break;
default:
echo "failure";
}
结果是"我是一个整数"。但我预计结果"我是零"。
这是php(我的版本:5.5.11)还是自然行为中的错误?
switch($myVar)
表示针对每个大小写表达式测试 $myvar
的值,直到找到匹配项。
当 $myvar
为 null 时,is_int($myVar)
返回布尔值 false。
null
与布尔false
的松散比较(null
将转换为布尔false
进行比较)返回 true,因此接受大小写
您可以通过更改 case 语句的顺序来首先测试空大小写来解决此问题,但是
道德:在案例陈述中使用表达式从来都不是一个好主意
为什么不使用gettype()
来标识变量的数据类型。
$myvar = null;
echo gettype($myvar)."'n";
$myvar = 1;
echo gettype($myvar)."'n";
$myvar = "a";
echo gettype($myvar);
演示