switch语句中的php空值混淆
我有以下php代码,它给了我一个意外的结果:switch语句中的php空值混淆,php,Php,我有以下php代码,它给了我一个意外的结果: $foo = NULL; switch($foo) { case 0: print "What?!"; } 我希望结果为零,但它符合案例0。php手册说NULL是非值,那么它怎么能等于0呢?php正在进行类型强制的弱比较。您将需要执行以下操作: $foo = NULL; if ($foo === 0) print "WTF!!!"; 因为php不是类型严格的语言 $foo = NULL; if( isset(
$foo = NULL;
switch($foo)
{
case 0:
print "What?!";
}
我希望结果为零,但它符合案例0。php手册说NULL是非值,那么它怎么能等于0呢?php正在进行类型强制的弱比较。您将需要执行以下操作:
$foo = NULL;
if ($foo === 0)
print "WTF!!!";
因为php不是类型严格的语言
$foo = NULL;
if( isset( $foo ) ) {
switch( $foo ) {
case 0:
print "WTF!!!";
}
}
我在这里假设,
switch
语句在与0
进行比较时强制执行$foo
的值。为了验证这一假设,为什么不尝试在switch语句上方添加以下内容:
echo $foo == NULL;
如果我是正确的,这应该在诅咒之前回显1。
开关
语句适用,这意味着以下内容被视为等同于0:
false
0
"0"
NULL
"any string"
""
这也可以写成
$foo = NULL;
switch( true )
{
case ( 0 === $foo ):
print "What?!";
default:
print "Default?!";
}
阅读上的注释,您将看到松散比较和switch语句的潜在问题代码>打印
bool(真)
;-)我花了一两秒钟才意识到为什么if语句中会出现这种情况。此时,在比较中使用if
,在默认情况下使用else
,会更快;D