PHP检查是否为False或Null。

27

当从函数返回一个变量时,我也会困惑如何检查它是否为false/null

什么时候使用 empty() 和什么时候使用 isset() 来检查条件?

7个回答

17

在函数返回值方面,既不使用isset也不使用empty,因为它们仅适用于变量,并且只是用于测试可能不存在的变量而不触发错误。

对于函数返回值的检查,检查变量的存在是毫无意义的,所以只需执行:

if (!my_function()) {
    // function returned a falsey value
}

要了解更详细的信息,请参阅PHP's issetempty的权威指南


1
我实际上正在尝试捕获一个返回的数组或false,并进一步确定接下来该做什么。 - Harsha M V
4
好的?所以 $return = myfunction(); if (!$return) { // 't was false! } - deceze
@tkoom 如果语法更像运算符,你会更开心吗? - deceze
@deceze,如果empty不是一个函数,那么它不要假装自己是一个函数会更好。它确实这样做了,这让程序员感到困惑,就像很多其他事情一样(请参见http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/)。 - ducin
3
请注意,这也包括空字符串、空数组、0和'0',这可能并不是您想要的。 - grasevski

11

检查变量(几个示例)

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)

2
你对 empty 的评论不太正确:empty 也会返回等同于 0 的值。 - ToolmakerSteve
ToolmakerSteve是正确的,对于研究人员来说,“empty()”的解释是具有误导性的。 - mickmackusa

6

Isset()函数检查一个变量是否有值,包括(False,0或空字符串),但不包括NULL。如果变量存在,则返回TRUE;否则返回FALSE。

另一方面,empty()函数检查变量是否具有空值,包括空字符串、0、NULL或False。如果变量具有非空且非零的值,则返回FALSE。


2
ISSET检查变量是否已设置,换句话说,它检查变量是否为任何值,除了NULL未分配值。如果变量存在且具有非NULL的值,则ISSET返回TRUE。这意味着已分配“”,0,“0”或FALSE的变量被设置,因此对于ISSET来说是TRUE。 EMPTY检查变量是否为空。空被解释为:“”(空字符串),0(整数0),0.0(浮点数0),“0”(字符串0),NULL,FALSE,array()(空数组)和“$var;”(在类中声明但没有值的变量)。

1
一个变量不能没有被赋值。它的值至少为 null - deceze

2

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';
}
?>

1
重要的是使用正确的函数/符号,而不仅仅是看起来正常工作的。有一些需要考虑的事情并没有在现有的答案中提到。
  • 使用 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;

但请记住,当$a未设置时,将会生成一个通知。如果$a可能未被设置,您可以使用$variable = !empty($a) ? $a : $b;代替。

0
  • 检查 false:if ($v === false)
  • 检查 null:if (is_null($v))

empty() 是一个恶魔。它很慢,当 $v 等于 false、0、'0'、array()、'' 时,它会返回 true。如果你需要这种检查,可以使用 if ($v)


4
“empty”并不是邪恶的,你只是不理解它的使用场景。我可以引导你阅读《PHP中isset和empty的权威指南》(http://kunststube.net/isset/)吗? - deceze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接