我可以使用@
而不是isset
分配或测试超全局变量吗?
用这个 :
$foo = intval(@$_POST['bar']);
而不是这个:
$foo = isset($_POST['bar']) ? intval($_POST['bar']) : 0;
无需生成通知即可工作,但可能由于某些原因,使用isset
优于@
?
我可以使用@
而不是isset
分配或测试超全局变量吗?
用这个 :
$foo = intval(@$_POST['bar']);
而不是这个:
$foo = isset($_POST['bar']) ? intval($_POST['bar']) : 0;
无需生成通知即可工作,但可能由于某些原因,使用isset
优于@
?
isset
使用三元运算符会更干净,更易于阅读。另一方面,错误抑制有一些间接成本:
我首先构建了一个简单的测试,该测试将循环一百万次访问带有和不带有抑制运算符的变量。差异很小,但很明显。使用抑制运算符最终会花费 40% 的时间来执行。
资料来源:
http://seanmonstar.com/post/909029460/php-error-suppression-performance http://www.lunawebs.com/blog/2010/06/07/another-look-at-php-error-supression-performance /
对于我们这些厌倦了在提取值之前使用 isset() 的人来说,还有一个使用@的替代方法:
function iisset(&$var, $default = null) {
return isset($var) ? $var : $default;
}
将不存在的数组索引作为参考传递时不会生成通知。因此,对于您的示例,您将使用:
$foo = intval(iisset($_POST['bar'], 0));
我希望 PHP 有这样的内置函数。在检索该数组索引之后立即进行的isset检查量非常普遍,以至于如果没有这样的函数,就会产生大量可笑的额外代码。
更新:
PHP 7 现在有一个内置的运算符,称为空合并运算符:
$foo = intval($_POST['bar'] ?? 0);