速度有区别吗
if (isset($_POST['var']))
或者
if ($_POST['var'])
哪个更好或者它们是一样的?
isset
出于以下原因,这是一个很好的做法:
$_POST['var']
是空字符串或"0"
,isset
仍会检测到变量是否存在。他们不一样。考虑一个概念数组:
$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 的类型杂耍,特别是转换为布尔值。
最后,您所做的称为微优化。永远不要选择哪一个被认为更快。无论哪个更快,差异都可以忽略不计,即使您可以可靠地确定哪个更快(我不确定您是否可以达到任何统计显着水平),它也不应该成为一个因素。
isset
测试变量是否有任何值,而 if 测试变量的值。
例如:
// $_POST['var'] == 'false' (the string false)
if (isset($_POST['var'])) {
// Will enter this if
}
if ($_POST['var']) {
// Won't enter this one
}
最大的问题是两个表达式的等价性取决于您正在检查的变量的值,因此您无法做出假设。
在严格的 PHP 中,您需要在使用变量之前检查是否设置了变量。
error_reporting(E_ALL | E_STRICT);
你在这里做什么
如果($var)
不检查是否设置了值。所以 Strict PHP 会为未设置的变量生成通知。(这在数组中经常发生)
同样在严格的 PHP 中(仅供您或其他人参考),在函数中使用未设置的 var 作为参数会引发通知,并且您无法在函数中检查 isset() 以避免这种情况。
只是重复别人说的话,如果你执行:
if($variable)
并且 $variable未设置,您将收到通知错误。加..
$var = 0;
if($variable) {
//This code will never run, because $var is false
}
但在这种情况下使用 isset 会返回 true。