is_int(null)在switch case中不起作用

时间:2016-01-19 15:09:43

标签: php

期待您有以下情况:

$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)中的错误还是自然行为?

2 个答案:

答案 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