is_int(空)在开关情况下不起作用


is_int(null) is not working in switch case

预计您有以下情况:

$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);

演示