@ $ array ['possible_missing_key']是反模式吗?

Ivo*_*lka 8 php arrays error-suppression operators

从PHP数组中提取可能缺少的值时,使用@是否可以?例:

$value = @$array['possibly_missing_key'];
Run Code Online (Sandbox Code Playgroud)

预期的行为:

if (isset($array['possibly_missing_key'])) {
    $value = $array['possibly_missing_key'];
} else {
    $value = null;
}
Run Code Online (Sandbox Code Playgroud)

我想知道,在传播使用模式之前.

Bol*_*ock 8

@运营商抑制了错误信息,并利用它可能设置你的代码为最终很难追查其他错误和意外的行为.因此,它肯定是反模式.

因此,我非常喜欢第二位.它使它更清晰

  • 它可能不存在于数组中,并且
  • 默认值是什么,如果它不存在

为了使其更简洁,您可以使用三元条件运算符?:,如Mark Ba​​ker的答案所示.略少的代码和更多的符号,但意义是公认的.


mar*_*rio 6

实际上,isset变化是反模式.如果你只是isset($var)?$var:NULL打算使用意图来抑制"错误",那么你就没有使用正确的语法来抑制错误.它具有相同的结果,但可读性较差.

人们因为感知"清洁"而争论,因为使用isset是一种微观优化.避免@和使用isset作为语法盐替代只是货物崇拜编程.