之间是否有任何速度差异
if (isset($_POST['var']))
或
if ($_POST['var'])
哪个更好还是一样?
答案 0 :(得分:17)
出于以下原因,使用isset
是一种好习惯:
$_POST['var']
为空字符串或"0"
,则isset
仍会检测到该变量是否存在。答案 1 :(得分:13)
他们不一样。考虑一个名义数组:
$arr = array(
'a' => false,
'b' => 0,
'c' => '',
'd' => array(),
'e' => null,
'f' => 0.0,
);
假设$x
是其中一个键('a'到'f')和键'g'不存在,它的工作原理如下:
$arr[$x]
为false
; isset($arr[$x])
对于密钥a,b,c,d和f为true
,对于e和g为false
;和array_key_exists($x, $arr)
对于所有密钥a至f为true
,false
为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。