在函数中检查NULL或为空?

时间:2018-06-13 18:15:32

标签: php null

我正在运行以下函数并想要检查值是否为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');

2 个答案:

答案 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