• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • NULL

    特殊的NULL值表示一个变量没有值。NULL类型唯一可能的值就是NULL

    在下列情况下一个变量被认为是NULL

    • 被赋值为NULL

    • 尚未被赋值。

    • 被unset()。

    语法

    NULL类型只有一个值,就是不区分大小写的常量NULL

    <?php
    $var = NULL;       
    ?>
    

    参见is_null()和unset()。

    转换到NULL

    使用(unset)$var将一个变量转换为null将不会删除该变量或 unset 其值。仅是返回NULL值而已。

    Note: empty array is converted to null by non-strict equal '==' comparison. Use is_null() or '===' if there is possible of getting empty array.
    $a = array();
    $a == null <== return true
    $a === null < == return false
    is_null($a) <== return false
    Note: Non Strict Comparison '==' returns bool(true) for 
    null == 0 <-- returns true
    Use Strict Comparison Instead
    null === 0 <-- returns false
    NULL is supposed to indicate the absence of a value, rather than being thought of as a value itself. It's the empty slot, it's the missing information, it's the unanswered question. It's not a jumped-up zero or empty set.
    This is why a variable containing a NULL is considered to be unset: it doesn't have a value. Setting a variable to NULL is telling it to forget its value without providing a replacement value to remember instead. The variable remains so that you can give it a proper value to remember later; this is especially important when the variable is an array element or object property.
    It's a bit of semantic awkwardness to speak of a "null value", but if a variable can exist without having a value, the language and implementation have to have something to represent that situation. Because someone will ask. If only to see if the slot has been filled.
    Funny. It looks like, that there is one, and only one possible value for variable $a that will pass this test:
    ($a != NULL) && ((bool)$a == NULL)
    It's "0" and it works because casting string "0" to boolean gives FALSE (and it's the only non empty string, that works this way). So remember that casting is not "transitive".
    Watch out. You can define a new constant with the name NULL with define("NULL","FOO");. But you must use the function constant("NULL"); to get it's value. NULL without the function call to the constant() function will still retrieve the special type NULL value.
    Within a class there is no problem, as const NULL="Foo"; will be accessible as myClass::NULL.