【发布时间】:2012-01-04 09:36:53
【问题描述】:
我对 PHP 中的 NULL 有疑问:
$a = '';
if($a == NULL) {
echo 'is null';
}
当$a 是空字符串时,为什么我会看到is null?这是一个错误吗?
【问题讨论】:
我对 PHP 中的 NULL 有疑问:
$a = '';
if($a == NULL) {
echo 'is null';
}
当$a 是空字符串时,为什么我会看到is null?这是一个错误吗?
【问题讨论】:
您正在寻找的是:
if($variable === NULL) {...}
注意===。
当使用== 时,和你一样,PHP 会处理 NULL、false、0、empty 字符串,和 empty 数组相等。
【讨论】:
$variable。你想要的其实是:$variable == null(注意==)
== null 匹配的是空字符串,而不仅仅是 null 或 undefined。
$a = '' 是一个空的 string,false 是一个布尔值,$a = 0; 是一个整数,null 来自于类型 null。 OP 告诉的是 PHP 会将它们作为“相同”的值进行线程化,但在类型上不会“相同”。因此,strict === 检查也会检查类型,如果您使用不同的类型,则会失败。这就是您应该在返回值中保持一致的原因。如果您通常在getName() 之类的方法中返回一个字符串,那么当它为空时您不应该得到null,而更可能是一个空的string $user->getName() === '' 或$user->getId() === 0 或$user->isActive === false .预期行为!
如下表所示,empty($foo)等价于$foo==null,is_null($foo)与$foo===null功能相同。该表还显示了有关null 比较的一些棘手值。 (φ表示一个未初始化的变量。)
empty is_null
==null ===null isset array_key_exists
ϕ | T | T | F | F
null | T | T | F | T
"" | T | F | T | T
[] | T | F | T | T
0 | T | F | T | T
false | T | F | T | T
true | F | F | T | T
1 | F | F | T | T
\0 | F | F | T | T
【讨论】:
==nulland ===null.
检查== 与===
'' == NULL 将返回 true0 == NULL 将返回 truefalse == null 将返回 true
在哪里
'' === NULL 将返回 false0 === NULL 将返回 falsefalse === NULL 将返回 false
【讨论】:
不,这不是错误。查看Loose comparisons with == table(第二个表),它显示了将第一列中的每个值与其他列中的值进行比较的结果:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
在那里你可以看到空字符串 "" 与 false、0、NULL 或 "" 相比将得到 true。
您可能想改用is_null [docs],或严格比较(第三张表)。
【讨论】:
0:codepad.org/qi40SG3E。所以(int)"php" == 0.
这不是错误,而是 PHP 的正常行为。这是因为 PHP 中的 == 运算符不检查类型。
'' == null == 0 == false
如果您还想检查值是否具有相同的类型,请改用===。要深入研究这种差异,请阅读official documentation。
【讨论】:
如果使用==,php 会将空字符串或数组视为null。要区分null 和empty,请使用=== 或is_null。所以:
if($a === NULL) 或 if(is_null($a))
【讨论】:
如果有人正在处理 ,这将在处理  时起作用。
先用str_replace()替换,再用empty()检查
empty(str_replace(" " ,"" , $YOUR_DATA)) ? $YOUR_DATA = '--' : $YOUR_DATA;
【讨论】:
NULL 代表没有值的变量。要检查变量是否为 NULL,您可以使用 is_null($var) 或比较 (===) 与 NULL。但是,如果未定义变量,这两种方式都会生成警告。类似于isset($var)和empty($var),可以作为函数使用。
var_dump(is_null($var)); // true
var_dump($var === null); // true
var_dump(empty($var)); // true
【讨论】:
使用empty - http://php.net/manual/en/function.empty.php。
例子:
$a = '';
if(empty($a)) {
echo 'is empty';
}
【讨论】: