我也很困惑如何检查一个变量是否是false
/null
当从一个函数返回时。
何时使用empty()
以及何时使用isset()
检查状况?
对于函数的返回,您既不使用isset
也不使用empty
,因为它们仅适用于变量,并且只是用于测试可能不存在的变量而不会触发错误。
对于函数返回检查变量是否存在是没有意义的,所以只需:
if (!my_function()) {
// function returned a falsey value
}
要更详细地了解这一点,请参阅PHP和的权威指南isset
empty
。
检查变量(几个例子)
if(is_null($x) === true) // null
if($x === null) // null
if($x === false)
if(isset($x) === false) // variable undefined or null
if(empty($x) === true) // check if variable is empty (length of 0)
Isset() 检查变量的值是否包括( False 、 0 或空字符串),但不包括 NULL。如果 var 存在,则返回 TRUE;否则为假。
另一方面,empty() 函数检查变量是否具有空值、空字符串、0、NULL 或 False。如果 var 具有非空且非零值,则返回 FALSE。
ISSET
检查变量以查看它是否已被设置,换句话说,它检查变量是否是除NULL
or之外的任何值not assigned a value
。如果变量存在并且具有非 NULL 值,则 ISSET 返回 TRUE。这意味着分配了“”、0、“0”或 FALSE 的变量已设置,因此 ISSET 为 TRUE。
EMPTY
检查变量是否为空。Empty 被解释为:“”(空字符串)、0(0 作为整数)、0.0(0 作为浮点数)、“0”(0 作为字符串)、NULL、FALSE、array()(空数组) ) 和 "$var;" (声明的变量,但在类中没有值。
isset — 确定变量是否已设置且不为 NULL
$a = "test";
$b = "anothertest";
var_dump(isset($a)); // TRUE
var_dump(isset($a, $b)); // TRUE
unset ($a);
var_dump(isset($a)); // FALSE
empty — 确定变量是否为空
<?php
$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';
}
?>
使用正确的函数/符号很重要,而不仅仅是看起来可以正常工作的任何东西。现有答案中未提及的一些事项需要考虑。
isset
检查变量是否尚未设置或已设置为null
。empty
检查变量是否 == false。null
与issetfalse
一样,如果尚未设置变量,则不会引发任何通知。if (!$variable)
orif ($variable == false)
与 相同empty
,只是如果未设置变量将引发通知。
if ($variable !== null)
与 相同isset
,只是如果未设置变量将引发通知。
注意
if (!$variable)
并且if ($variable !== null)
比它们各自的功能执行得更好,但在生成通知时却没有,因此,需要设置 $variable。不要将通知抑制为微优化,因为这会使您的代码更难调试,甚至抑制通知会导致性能损失。
合并运算符
如果您正在检查一个变量以便为它分配一个值,那么您应该使用??
,?:
而不是if
语句。
??
??
不等于 null 时赋值。
$variable = $a ?? $b
是相同的:
if (isset($a))
$variable = $a;
else
$variable = $b;
?:
?:
当 not == 为 false 时赋值。
$variable = $a ?: $b
是相同的:
if ($a)
$variable = $a;
else
$variable = $b;
但请记住,当 $a 未设置时会生成通知。如果 $a 可能没有设置,你可以$variable = !empty($a) ? $a : $b;
改用。
empty() 是个恶魔。它很慢,当 $v queals false,0,'0',array(),''时,它会返回 true。如果你需要这种检查,你可以使用if ($五)。