开关语句中的 php 空值混淆

php
2022-08-30 15:15:55

我有以下php代码,给我一个意想不到的结果:

$foo = NULL;

switch($foo)
{
    case 0:
        print "What?!";
}

我预计结果为零,但它与情况0匹配。php手册说NULL是一个非值,那么它怎么能等于0呢?


答案 1

该语句应用松散比较,这意味着以下事物被视为等效于 0:switch

false
0
"0"
NULL
"any string"
""

答案 2

因为php不是类型严格的语言

$foo = NULL;

if( isset( $foo ) ) {
    switch( $foo ) {
        case 0:
            print "WTF!!!";
    }
}

推荐