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
的条件为
- 变量存在
- 变量值需要是一个有效值
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 不存在会发起警告