当从函数返回一个变量时,我也会困惑如何检查它是否为false
/null
。
什么时候使用 empty()
和什么时候使用 isset()
来检查条件?
在函数返回值方面,既不使用isset
也不使用empty
,因为它们仅适用于变量,并且只是用于测试可能不存在的变量而不触发错误。
对于函数返回值的检查,检查变量的存在是毫无意义的,所以只需执行:
if (!my_function()) {
// function returned a falsey value
}
要了解更详细的信息,请参阅PHP's 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)
empty
的评论不太正确:empty
也会返回等同于 0 的值。 - ToolmakerSteveIsset()函数检查一个变量是否有值,包括(False,0或空字符串),但不包括NULL。如果变量存在,则返回TRUE;否则返回FALSE。
另一方面,empty()函数检查变量是否具有空值,包括空字符串、0、NULL或False。如果变量具有非空且非零的值,则返回FALSE。
ISSET
检查变量是否已设置,换句话说,它检查变量是否为任何值,除了NULL
或未分配值
。如果变量存在且具有非NULL的值,则ISSET返回TRUE。这意味着已分配“”,0,“0”或FALSE的变量被设置,因此对于ISSET来说是TRUE。
EMPTY
检查变量是否为空。空被解释为:“”(空字符串),0(整数0),0.0(浮点数0),“0”(字符串0),NULL,FALSE,array()(空数组)和“$var;”(在类中声明但没有值的变量)。null
。 - decezeisset — 判断一个变量是否已设置并且不为 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
被转换为 false
,与 isset 一样,如果变量未设置,则不会抛出任何提示。if (!$variable)
或 if ($variable == false)
与 empty
相同,只是如果变量未设置,则会抛出提示。
if ($variable !== null)
与 isset
相同,只是如果变量未设置,则会抛出提示。
NB
如果未生成通知,则if (!$variable)
和if ($variable !== null)
比它们各自的函数执行效率更高,因此需要设置$variable。不要抑制通知作为微观优化,因为这会使您的代码更难调试,即使抑制通知也会导致性能损失。
合并运算符
如果您正在检查变量以便对其赋值,则应使用??
、?:
而不是if
语句。
??
??
当不等于 null 时赋值。
$variable = $a ?? $b
相当于:
if (isset($a))
$variable = $a;
else
$variable = $b;
?::
?:
当不等于 false 时赋值。
$variable = $a ?: $b
相当于:
if ($a)
$variable = $a;
else
$variable = $b;
$variable = !empty($a) ? $a : $b;
代替。empty() 是一个恶魔。它很慢,当 $v 等于 false、0、'0'、array()、'' 时,它会返回 true。如果你需要这种检查,可以使用 if ($v)。
$return = myfunction(); if (!$return) { // 't was false! }
- decezeempty
不是一个函数,那么它不要假装自己是一个函数会更好。它确实这样做了,这让程序员感到困惑,就像很多其他事情一样(请参见http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/)。 - ducin