我有以下PHP代码,它给了我一个意想不到的结果:
$foo = NULL;
switch($foo)
{
case 0:
print "What?!";
}
我希望结果不算什么,但它与案例0匹配.php手册说NULL是非值,那么它怎么能等于0?
答案 0 :(得分:26)
switch
语句适用loose comparison,这意味着以下内容被视为等效于0:
false
0
"0"
NULL
"any string"
""
答案 1 :(得分:3)
beacuse php不是类型严格的语言
$foo = NULL;
if( isset( $foo ) ) {
switch( $foo ) {
case 0:
print "WTF!!!";
}
}
答案 2 :(得分:0)
PHP正在进行类型强制,弱比较。你需要这样做:
$foo = NULL;
if ($foo === 0)
print "WTF!!!";
答案 3 :(得分:0)
我假设在这里,但可能是switch
语句在与$foo
比较时强制0
的值。为了测试这个假设,为什么不尝试在switch语句上面添加它:
echo $foo == NULL;
这应该在诅咒之前回应1,如果我是正确的......
答案 4 :(得分:0)
这也可以写成
$foo = NULL;
switch( true )
{
case ( 0 === $foo ):
print "What?!";
default:
print "Default?!";
}
答案 5 :(得分:0)
编辑:我的测试不准确,有人向我指出了这一点。如果您有兴趣,请查看评论。
根据我的测试,最重要的答案是不准确的。
似乎 PHP switch
语句将 NULL 视为“小丑”,并将任何情况应用于它。
我尝试了不同的数字和字符串,它们都被解雇了。没有任何迹象表明它应该是 NULL,甚至在 PHP 松散比较中也不行。
所以我的建议是在开头添加 case NULL:
,就像在结尾添加 default
一样。
$foo = NULL;
switch($foo)
{
case NULL:
print "This is NULL"; break;
case 0:
print "What?!";
}