PHP 中的 isset 与 empty

需要明白的一点是一个变量存不存在(是否在栈内存中占有一席之地,你也可以占着茅坑不那啥~)与它的值是否为空(内存中的值是否为有效值)是两码事,你可以声明一个变量但不为它赋予一个有效值。

真值表

Variable 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
NULL true false false false

isset

如果 $variable 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。

empty

empty 的本质,如果你仔细留意了上方的真值表,会发现 !empty($variable) 等价于 isset($variable) && !empty($variable)
也就是说这种情况使用 !empty($variable) 返回 true 的条件为

  1. 变量存在
  2. 变量值需要是一个有效值
empty($foo) = !isset($foo) || !$foo;
!empty($foo) = isset($foo) && $foo;

换句话说,empty 和 !$foo 一样,区别在于当 $variable 不存在不会抛出警告信息。
一般情况下如果直接使用 (boolean) $foo 而当 $foo 不存在时,会发出变量不存在警告,所以可以使用 !empty 来判断变量是否存在以及值是否是有效值。

以下的东西被认为是空的:
"" (空字符串)
0 (作为整数的0)
0.0 (作为浮点数的0)
"0" (作为字符串的0)
NULL
FALSE
array() (一个空数组)
$var; (一个声明了,但是没有值的变量)

关于 (boolean) $foo

编程当中经常会写如下代码

if($foo) {
    // do something
}

本质等于

if( (boolean) $foo) {
    // do something
}

如果 $foo 不存在会发起警告

posted @ 2020-06-29 23:29  我听不见  阅读(216)  评论(0编辑  收藏  举报