php null值在switch语句中混淆

lan*_*ng2 22 php

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

$foo = NULL;

switch($foo)
{
    case 0:
        print "What?!";
}
Run Code Online (Sandbox Code Playgroud)

我希望结果不算什么,但它与案例0匹配.php手册说NULL是非值,那么它怎么能等于0?

bor*_*ble 28

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

false
0
"0"
NULL
"any string"
""
Run Code Online (Sandbox Code Playgroud)


Ser*_*geS 6

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

$foo = NULL;

if( isset( $foo ) ) {
    switch( $foo ) {
        case 0:
            print "WTF!!!";
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

这也可以写成

$foo = NULL;

switch( true )
{
    case ( 0 === $foo ):
        print "What?!";
    default:
        print "Default?!";
}
Run Code Online (Sandbox Code Playgroud)

  • 此时,在比较中执行“if”并在默认情况下执行“else”会更快……;D (2认同)