什么更好,不管是不是?

时间:2009-05-10 00:22:54

标签: php isset

之间是否有任何速度差异
if (isset($_POST['var']))

if ($_POST['var'])

哪个更好还是一样?

5 个答案:

答案 0 :(得分:17)

出于以下原因,使用isset是一种好习惯:

  • 如果$_POST['var']为空字符串或"0",则isset仍会检测到该变量是否存在。
  • 不使用isset会生成通知。

答案 1 :(得分:13)

他们不一样。考虑一个名义数组:

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

假设$x是其中一个键('a'到'f')和键'g'不存在,它的工作原理如下:

    对于所有密钥a到g,
  • $arr[$x]false;
  • isset($arr[$x])对于密钥a,b,c,d和f为true,对于e和g为false;和
  • array_key_exists($x, $arr)对于所有密钥a至f为truefalse为g。

我建议您查看PHP's type juggling,特别是转换为布尔值。

最后,你正在做的是micro-optimization。永远不要选择哪一个被认为更快。哪个更快,差异可以忽略不计,即使你能够可靠地确定哪个更快(我不确定你能达到任何统计上显着的水平),它应该从不成为一个因素。

答案 2 :(得分: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
}

最大的问题是两个表达式的等价性取决于你正在检查的变量的值,所以你不能做出假设。

答案 3 :(得分:1)

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

error_reporting(E_ALL | E_STRICT);

你在这做什么

如果($变种)

不检查是否设置了值。因此,严格的PHP将生成未设置变量的通知。 (这在阵列中发生了很多)

同样在严格的PHP中(对你或其他人只是一个FYI),在函数中使用unset var作为参数会抛出一个通知,你不能在函数中检查isset()以避免这种情况。

答案 4 :(得分:0)

如果执行:

,只需重复别人说的话
if($variable)

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

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

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