2

我可以使用@而不是isset分配或测试超全局变量吗?

用这个 :

$foo = intval(@$_POST['bar']);

而不是这个:

$foo = isset($_POST['bar']) ? intval($_POST['bar']) : 0;

无需生成通知即可工作,但可能由于某些原因,使用isset优于@?

4

2 回答 2

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 /

于 2013-05-22T18:01:35.387 回答
2

对于我们这些厌倦了在提取值之前使用 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);
于 2014-06-15T03:38:06.340 回答