6

速度有区别吗

if (isset($_POST['var']))

或者

if ($_POST['var'])

哪个更好或者它们是一样的?

4

5 回答 5

17

isset出于以下原因,这是一个很好的做法:

  • 如果$_POST['var']是空字符串或"0"isset仍会检测到变量是否存在。
  • 不使用 isset 将生成通知。
于 2009-05-10T00:31:13.290 回答
14

他们不一样。考虑一个概念数组:

$arr = array(
  'a' => false,
  'b' => 0,
  'c' => '',
  'd' => array(),
  'e' => null,
  'f' => 0.0,
);

假设$x是这些键之一('a'到'f')和不存在的键'g'它的工作方式如下:

  • $arr[$x]适用false于所有键 a 到 g;
  • isset($arr[$x])适用true于键 a、b、c、d 和 f,但false适用于 e 和 g;和
  • array_key_exists($x, $arr)适用true于所有键 a 到 f,false适用于 g。

我建议你看看PHP 的类型杂耍,特别是转换为布尔值。

最后,您所做的称为微优化。永远不要选择哪一个被认为更快。无论哪个更快,差异都可以忽略不计,即使您可以可靠地确定哪个更快(我不确定您是否可以达到任何统计显着水平),它也不应该成为一个因素

于 2009-05-10T00:30:28.657 回答
4

isset测试变量是否有任何值,而 if 测试变量的值。

例如:

// $_POST['var'] == 'false' (the string false)
if (isset($_POST['var'])) {
    // Will enter this if
}
if ($_POST['var']) {
    // Won't enter this one
}

最大的问题是两个表达式的等价性取决于您正在检查的变量的值,因此您无法做出假设。

于 2009-05-10T00:30:53.977 回答
1

在严格的 PHP 中,您需要在使用变量之前检查是否设置了变量。

error_reporting(E_ALL | E_STRICT);

你在这里做什么

如果($var)

不检查是否设置了值。所以 Strict PHP 会为未设置的变量生成通知。(这在数组中经常发生)

同样在严格的 PHP 中(仅供您或其他人参考),在函数中使用未设置的 var 作为参数会引发通知,并且您无法在函数中检查 isset() 以避免这种情况。

于 2009-05-10T00:32:30.680 回答
0

只是重复别人说的话,如果你执行:

if($variable)

并且 $variable设置,您将收到通知错误。加..

$var = 0;
if($variable) {
    //This code will never run, because $var is false
}

但在这种情况下使用 isset 会返回 true。

于 2009-05-10T12:15:11.070 回答