php null value confusion in switch statement

I have the following php code that gives me an unexpected result:

$foo = NULL;

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

I'd expect the result to be nothing, but it matches case 0. The php manual says that NULL is a non-value, so how can it equal 0?


Solution 1:

The switch statement applies loose comparison which means that the following things are treated as equivalent to 0:

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

Solution 2:

beacuse php is not type strict language

$foo = NULL;

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