22

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

何时使用empty()以及何时使用isset()检查状况?

4

7 回答 7

14

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

对于函数返回检查变量是否存在是没有意义的,所以只需:

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

要更详细地了解这一点,请参阅PHP的权威指南issetempty

于 2012-07-13T05:41:43.167 回答
10

检查变量(几个例子)

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)
于 2012-07-13T05:42:26.007 回答
6

Isset() 检查变量的值是否包括( False 、 0 或空字符串),但不包括 NULL。如果 var 存在,则返回 TRUE;否则为假。

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

于 2012-07-13T05:40:05.447 回答
2

ISSET检查变量以查看它是否已被设置,换句话说,它检查变量是否是除NULLor之外的任何值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;" (声明的变量,但在类中没有值。

于 2012-07-13T05:39:33.857 回答
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';
}
?>
于 2012-07-13T05:55:43.700 回答
1

使用正确的函数/符号很重要,而不仅仅是看起来可以正常工作的任何东西。现有答案中未提及的一些事项需要考虑。

  • 用于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;改用。

于 2020-12-17T01:03:25.683 回答
0
  • 检查错误:if ($v === false)
  • 检查空值:if (is_null($v))

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

于 2012-07-13T05:41:14.497 回答