在编写代码时使用'@'是否有任何问题

时间:2009-10-23 13:09:44

标签: php performance

  

可能重复:
  Reference - What does this symbol mean in PHP?

编写代码时使用'@'有什么问题吗?它背后的机制是什么?

6 个答案:

答案 0 :(得分:6)

它会抑制错误报告,所以我猜它会让调试变得更难; - )

答案 1 :(得分:5)

  

WARNING:目前是“@”错误控制   运营商前缀甚至会禁用   错误报告严重错误   这将终止脚本执行。   除此之外,这意味着如果   你使用“@”来抑制a的错误   某些功能,或者不是   可用或有错误的,   脚本将死在那里没有   指示为什么。

答案 2 :(得分:3)

PHP中的@ operator是一个错误控制操作符。它会抑制它之前的任何表达式的错误。

唯一明显的问题是它使您的代码更难调试。

编辑:由于评论者问...在您想要使用可能不存在的变量(例如$ _GET或$ _POST变量)的情况下,它实际上非常有用。

if (isset($_GET['hello'] && $_GET['hello'] == "yes") {} // without @
if (@$_GET['hello'] == "yes") {} // with @

某些php函数也会抛出错误并返回false,因此在这些情况下,您可能希望抑制错误并检查返回值而不是try和catch。

答案 3 :(得分:1)

如果您使用的外部库触发了一个可以安全忽略的错误,那么它会非常有用。简单示例是一个库,当它无法连接到外部服务时触发错误,如果您可以根据函数的返回值推断它失败,您可以使用@运算符来抑制相对不需要的错误。

我从来没有在编码时使用它,因为如果你没有错误可以使调试代码相当困难,只在你知道“工作”的代码上使用它,但可以抛出你不感兴趣的奇怪错误英寸

答案 4 :(得分:0)

它不仅可以抑制您可能需要了解的错误,而且无论是否遇到任何错误,都会降低代码速度。 @的工作原理是将错误报告的php ini设置暂时设置为0,然后再回到之前的设置。

答案 5 :(得分:0)

在任何上下文中使用@都是个坏主意。评估一些变量

几乎可以
$x = @ $somearray[$somethingelse]; # suppress E_NOTICE if array key is absent

但在任何其他情况下,这绝对是可怕的。最糟糕的是调用一个有效“@”的函数 - 然后在禁用错误报告的情况下执行整个函数及其自己的子程序。如果其中任何一个是抛出致命的例外,你就不会知道在哪里或什么。

PHP错误处理可怕。但使用@更糟糕。

可悲的是,没有运营商只能压制一些(例如只是E_NOTICE和E_WARN)而不是其他人。