Php 使用isset或@测试/分配超全局变量

Php 使用isset或@测试/分配超全局变量,php,isset,superglobals,Php,Isset,Superglobals,我是否可以使用@而不是isset来分配或测试超全局变量 使用以下命令: $foo = intval(@$_POST['bar']); 与此相反: $foo = isset($_POST['bar']) ? intval($_POST['bar']) : 0; 在不生成通知的情况下工作,但可能由于某些原因,isset的使用优于@?isset与三元运算符一起使用会更干净、更易于阅读。 另一方面,错误抑制有一些间接成本: 我首先构建了一个简单的测试,可以循环一百万次 前置和不前置抑制运算符的变量。

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

使用以下命令:

$foo = intval(@$_POST['bar']);
与此相反:

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

在不生成通知的情况下工作,但可能由于某些原因,
isset
的使用优于
@

isset
与三元运算符一起使用会更干净、更易于阅读。 另一方面,错误抑制有一些间接成本:

我首先构建了一个简单的测试,可以循环一百万次 前置和不前置抑制运算符的变量。这个 差异很小,但很明显。使用抑制运算符 最终执行时间延长了40%

资料来源:


isset
使用三元运算符将更干净、更易于阅读。 另一方面,错误抑制有一些间接成本:

我首先构建了一个简单的测试,可以循环一百万次 前置和不前置抑制运算符的变量。这个 差异很小,但很明显。使用抑制运算符 最终执行时间延长了40%

资料来源:


对于我们这些在提取值之前厌倦使用isset()的人来说,有一种替代方法可以使用@:

function iisset(&$var, $default = null) {
     return isset($var) ? $var : $default;
}
没有生成将不存在的数组索引作为引用传递的通知。因此,对于您的示例,您将使用:

$foo = intval(iisset($_POST['bar'], 0));
我希望PHP有这样一个内置函数。紧接着检索该数组索引的isset检查量是如此普遍,以至于如果没有这样的函数,就会有大量的额外代码

更新:

PHP 7现在有一个内置操作符,称为:


对于我们这些在提取值之前厌倦使用isset()的人来说,有一种替代方法可以使用@:

function iisset(&$var, $default = null) {
     return isset($var) ? $var : $default;
}
没有生成将不存在的数组索引作为引用传递的通知。因此,对于您的示例,您将使用:

$foo = intval(iisset($_POST['bar'], 0));
我希望PHP有这样一个内置函数。紧接着检索该数组索引的isset检查量是如此普遍,以至于如果没有这样的函数,就会有大量的额外代码

更新:

PHP 7现在有一个内置操作符,称为:


我认为isset是更干净的编程风格。但是不应该有任何缺点。错误抑制本身就是一个缺点。@ Yoshi调试,也许,但是存在<代码> XDEXG.SURAM< <代码>……我会考虑使用错误抑制,这里是一个非常尖刻的方法。我认为isset是一种更干净的编程风格。但是不应该有任何缺点。错误抑制本身就是一个缺点。@ Yoshi调试,也许,但是存在<代码> XDEXG.SURAM< <代码>……我会考虑使用错误抑制,这里是一个非常尖刻的方法。它模糊了你的真实意图。