哪个更好,isset还是不isset?

6

两种语言之间有速度差异吗?

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

或者

if ($_POST['var'])

哪一个更好,还是它们是一样的?

4
显然,使用 isset() 函数需要更长的打字时间:/ - Chad Grant
只是想知道在这种情况下是否真的需要它,我猜不需要。 - James
5个回答

17

使用 isset 是一个好习惯,原因如下:

  • 如果 $_POST['var'] 是一个空字符串或者 "0"isset 仍然可以检测到该变量的存在。
  • 不使用 isset 将会生成一个提示。

14

它们不是相同的。考虑一个概念性数组:

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

假设$x是这些键之一('a'到'f'),而不存在的键'g',它的工作原理如下:
  • $arr[$x]对于所有键a到g都是false
  • isset($arr[$x])对于键a、b、c、d和f为true,对于e和g为false
  • array_key_exists($x, $arr)对于所有键a到f都为true,对于g为false
我建议您查看PHP的类型转换,特别是布尔型的转换。
最后,您正在进行微优化。永远不要根据哪个被认为更快来选择其中之一。无论哪一个更快,在差异上都是如此微不足道,即使您可以可靠地确定哪一个更快(我不确定您能够以任何统计学显著水平确定哪一个更快),它也绝不应该成为因素。

Cletus是正确的 - 一个SQL查询将比一千个isset检查慢上一千倍。值得注意的是,如果($arr['g'])会生成一个E_NOTICE“未定义变量”。 - Shabbyrobe

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
}

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


我有一种感觉,你在第一行需要做一点更正。isset不是“测试变量是否具有任何值”,它测试它是否已被实例化/创建$a =''; isset($a);将评估为true。 - Fernando Silva

1
在严格的PHP中,您需要在使用变量之前检查它是否已设置。
error_reporting(E_ALL | E_STRICT);

你在这里做什么

if($var)

并不是检查值是否设置。因此,严格的PHP将为未设置的变量生成一个通知。(这在数组中经常发生)

此外,在严格的PHP中(只是提醒你或其他人),在函数中使用未设置的变量作为参数会抛出一个通知,并且你不能在函数内部使用isset()来避免这种情况。


这并不完全正确。在这种情况下,E_STRICT与抛出通知无关。即使关闭了E_STRICT,通知仍然会被抛出。 - Matt
你是指在代码中还是日志文件中?因为你需要在php.ini中启用E_STRICT才能抛出它(PHP 6之前)。 - Ólafur Waage

0

重申一下别人说过的话,如果你执行:

if($variable)

如果 $variable 设置,你将会收到一个提示错误。另外...

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

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


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