我正在运行以下函数并想要检查值是否为NULL或'',但它似乎对两者都做出相同的反应。这会打印C1C2
。如何让它打印B1C1C2
?我应该以某种方式使用isset()
吗?
function title($a = NULL, $b = NULL, $c = NULL) {
if( $a != NULL )
{
echo 'A1';
if( $a != '' )
{
echo 'A2';
}
}
if( $b != NULL )
{
echo 'B1';
if( $b != '' )
{
echo 'B2';
}
}
if( $c != NULL )
{
echo 'C1';
if( $c != '' )
{
echo 'C2';
}
}
}
title(NULL, '', 'C');
答案 0 :(得分:2)
如果你只是检查变量的值,你会得到null
或空字符串(''
):
null == ''; // 1 (true)
您还需要检查类型:
null === ''; // (false)
所以而不是:
if( $a != NULL )
执行命令
if( $a !== NULL )
哪个也会检查类型; ''
是string
- 不是null
类型。
重新排列的功能:
function title($a = NULL, $b = NULL, $c = NULL) {
if( $a !== NULL )
{
echo 'A1';
if( $a !== '' )
{
echo 'A2';
}
}
if( $b !== NULL )
{
echo 'B1';
if( $b !== '' )
{
echo 'B2';
}
}
if( $c !== NULL )
{
echo 'C1';
if( $c !== '' )
{
echo 'C2';
}
}
}
title(NULL, '', 'C'); // outputs: B1C1C2
答案 1 :(得分:0)
要小心,因为......
if(null == 0) echo "yes"; else echo "nope"; //prints yes
if(null === 0) echo "yes"; else echo "nope"; //prints no
所以总是使用triple equals(===或!==)而不是double equals(==或!=)来避免这个问题。
但最合适的方法是使用" is_null()" PHP内置函数,返回true或false。
if(is_null(0)) echo "yes"; else echo "nope"; //prints nope
所以我们......
function title($a = NULL, $b = NULL, $c = NULL) {
if(!is_null($a)) // using is_null builtin function
echo 'A1';
if($a !== '')// not !=, because 0!='' is false
echo 'A2';
if(!is_null($b))
echo 'B1';
if($b !== '')
echo 'B2';
if(!is_null($c))
echo 'C1';
if($c !== '')
echo 'C2';
}
title(NULL, '', 'C'); // prints B1C1C2