我可以使用@
代替isset
来分配或测试超全局变量吗?
使用此:
$foo = intval(@$_POST['bar']);
而不是:
$foo = isset($_POST['bar']) ? intval($_POST['bar']) : 0;
在没有生成通知的情况下工作,但可能由于某些原因,isset
的使用优于@
?
答案 0 :(得分:2)
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/
答案 1 :(得分:2)
对于那些厌倦了在拉取值之前使用isset()的人,可以使用 @ 的替代方法:
function iisset(&$var, $default = null) {
return isset($var) ? $var : $default;
}
没有生成通知将不存在的数组索引作为引用传递。因此,对于您的示例,您将使用:
$foo = intval(iisset($_POST['bar'], 0));
我希望PHP有一个像这样内置的功能。 isset 检查的数量随后立即检索到该数组索引是如此常见,以至于没有像这样的函数会有大量的额外代码。
<强>更新强>
PHP 7现在有一个内置运算符,称为null coalesce operator:
$foo = intval($_POST['bar'] ?? 0);