What does the exclamation point mean in PHP?

Possible Duplicate:
Reference - What does this symbol mean in PHP?
Getting confused with empty, isset, !empty, !isset

In PHP what is the difference between:

if(!isset) 
if(isset)

Same with if(!empty) and if(empty) ?

What does the "!" character mean?


! is the logical negation or NOT operator. It reverses the sense of the logical test.

That is:

  • if(isset) makes something happen if isset is logical True .
  • if(!isset) makes something happen if isset is logical False .
  • More about operators (logical and other types) in the PHP documentation. Look up ! there to cement your understanding of what it does. While you're there, also look up the other logical operators:

  • && logical AND
  • || logical OR
  • xor logical EXCLUSIVE-OR
  • Which are also commonly used in logic statements.


    The ! character is the logical "not" operator. It inverts the boolean meaning of the expression.

    If you have an expression that evaluates to TRUE , prefixing it with ! causes it evaluate to FALSE and vice-versa.

    $test = 'value';
    
    var_dump(isset($test));  // TRUE
    var_dump(!isset($test)); // FALSE
    

    isset() returns TRUE if the given variable is defined in the current scope with a non-null value.

    empty() returns TRUE if the given variable is not defined in the current scope, or if it is defined with a value that is considered "empty". These values are:

    NULL    // NULL value
    0       // Integer/float zero
    ''      // Empty string
    '0'     // String '0'
    FALSE   // Boolean FALSE
    array() // empty array
    

    Depending PHP version, an object with no properties may also be considered empty.

    The upshot of this is that isset() and empty() almost compliment each other (they return the opposite results) but not quite, as empty() performs an additional check on the value of the variable, isset() simply checks whether it is defined.

    Consider the following example:

    var_dump(isset($test)); // FALSE
    var_dump(empty($test)); // TRUE
    
    $test = '';
    
    var_dump(isset($test)); // TRUE
    var_dump(empty($test)); // TRUE
    
    $test = 'value';
    
    var_dump(isset($test)); // TRUE
    var_dump(empty($test)); // FALSE
    

    $var = 0;
    
    // Evaluates to true because $var is empty
    if (empty($var)) {
        echo '$var is either 0, empty, or not set at all';
    }
    
    // Evaluates as true because $var is set
    if (isset($var)) {
        echo '$var is set even though it is empty';
    }
    

    Edit:

    here is a test case for you:

    $p = false;
    echo isset($p) ? '$p is setted : ' : '$p is not setted : ';
    echo empty($p) ? '$p is empty' : '$p is not empty';
    echo "<BR>";
    

    $p is setted : $p is empty

    链接地址: http://www.djcxy.com/p/10210.html

    上一篇: 为什么要使用@before变量。 有人可以解释

    下一篇: 感叹号在PHP中意味着什么?