Why check both isset() and !empty()

后端 未结 10 2666
难免孤独
难免孤独 2020-11-21 23:48

Is there a difference between isset and !empty. If I do this double boolean check, is it correct this way or redundant? and is there a shorter way

10条回答
  •  不要未来只要你来
    2020-11-22 00:26

    isset($vars[1]) AND !empty($vars[1]) is equivalent to !empty($vars[1]).

    I prepared simple code to show it empirically.

    Last row is undefined variable.

    +-----------+---------+---------+----------+---------------------+
    | Var value | empty() | isset() | !empty() | isset() && !empty() |
    +-----------+---------+---------+----------+---------------------+
    | ''        | true    | true    | false    | false               |
    | ' '       | false   | true    | true     | true                |
    | false     | true    | true    | false    | false               |
    | true      | false   | true    | true     | true                |
    | array ()  | true    | true    | false    | false               |
    | NULL      | true    | false   | false    | false               |
    | '0'       | true    | true    | false    | false               |
    | 0         | true    | true    | false    | false               |
    | 0.0       | true    | true    | false    | false               |
    | undefined | true    | false   | false    | false               |
    +-----------+---------+---------+----------+---------------------+
    

    And code

    $var1 = "";
    $var2 = " ";
    $var3 = FALSE;
    $var4 = TRUE;
    $var5 = array();
    $var6 = null;
    $var7 = "0";
    $var8 = 0;
    $var9 = 0.0;
    
    function compare($var)
    {
        print(var_export($var, true) . "|" .
            var_export(empty($var), true) . "|" .
            var_export(isset($var), true) . "|" .
            var_export(!empty($var), true) . "|" .
            var_export(isset($var) && !empty($var), true) . "\n");
    }
    
    for ($i = 1; $i <= 9; $i++) {
        $var = 'var' . $i;
        compare($$var);
    }
    
    @print(var_export($var10, true) . "|" .
        var_export(empty($var10), true) . "|" .
        var_export(isset($var10), true) . "|" .
        var_export(!empty($var10), true) . "|" .
        var_export(isset($var10) && !empty($var10), true) . "\n");
    

    Undefined variable must be evaluated outside function, because function itself create temporary variable in the scope itself.

提交回复
热议问题