【问题标题】:Empty PHP variables空 PHP 变量
【发布时间】:2010-04-07 04:12:10
【问题描述】:

除了isset()empty() 之外还有更好的方法来测试空变量吗?

【问题讨论】:

  • isset() 和 empty() 有什么问题?
  • 我想我记得在 Coding Horror 或其他博客上读到过一种不同的方法,但不记得了。我不是说 isset() 或 empty() 有什么问题,只是想戳一下大脑。
  • 您必须小心empty(),因为它会为某些特殊值返回true,例如字符串"0"
  • @Asaph 是的,因为根据 PHP 的定义,它是 empty。那是因为 PHP 处理了很多字符串,尤其是 POST 值,所以 0"0" 被视为同样为空。这是你必须学习的规则。如果您想要更精确的控制,请使用isset 并严格比较认为为空的值。
  • @dscher:不用担心。它发生在我们最好的人身上:)

标签: php variables null-test


【解决方案1】:

这取决于上下文。

isset() 只会在变量的值不是 NULL 时返回 true(因此至少定义了变量)。

empty() 将在变量的值被视为“空”值时返回 true,通常这意味着 0"0"NULLFALSEarray()(空数组)和""(一个空字符串),其他都不为空。

一些例子

FALSE == isset($foo);
TRUE == empty($foo);
$foo = NULL;
FALSE == isset($foo);
TRUE == empty($foo);
$foo = 0;
TRUE == isset($foo);
TRUE == empty($foo);
$foo = 1;
TRUE == isset($foo);
FALSE == empty($foo);

【讨论】:

  • array(),即空数组也是empty
【解决方案2】:

请留意您使用 PHP 得到的一些奇怪的 == 结果;您可能需要使用 === 来获得您期望的结果,例如

if (0 == '') {
  echo "weird, huh?\n";
}

if  (0 === '') {
  echo "weird, huh?\n";
} else {
  echo "that makes more sense\n";
}

因为0为假,空字符串为假,0 == ''与FALSE == FALSE相同,为真。使用 === 会强制 PHP 也检查类型。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 2011-09-10
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多