我应该在PHP代码中使用@吗?

时间:2011-02-02 08:45:18

标签: php

如果我在代码中使用@,会影响性能吗?

6 个答案:

答案 0 :(得分:21)

本文有助于回答您的问题:http://anvilstudios.co.za/blog/php/how-to-ignore-errors-in-a-custom-php-error-handler/

特别是“@有其用途”部分:

  

现在我们应该非常谨慎地使用@运算符来处理   错误而不是抑制它们。但也有少数   情况我可以想到一个人可能需要压制一些PHP   错误。我举两个例子:

     
      
  • 您可能正在使用一些使用@的大型外部库,因此需要能够忽略这些错误作为作者   图书馆的意图,否则你的程序将绊倒   它不需要的地方。您可以编辑库,但它可能   花费大量时间,您的更改将再次被应用   每次作者发布图书馆的更新。

  •   
  • 另一个例子可能是当fopen函数用于打开外部URL时,无法为很多可能的URL之一打开URL   原因。该函数返回false以指示失败,即   很好,但引用PHP手册,“级别E_WARNING的错误是   生成“太多,不太好 - 它应该真的导致异常   被抛出,因为这是一个不规则的情况,但其中一个   应该是预期的。   在这种情况下,人们希望能够忽略   错误,并继续显式执行程序   以适当的方式回应 - 究竟是什么例外!   但是,有一种方法可以将错误转换为异常等   在这种情况下避免使用@。在自定义错误处理程序中   (这是我们发现自己在这篇文章中的地方),抛出一个   ErrorException - 这需要您显式捕获和处理   它在之前使用@的代码中,这是一种更好的方法   处理错误。

  •   

答案 1 :(得分:6)

您不应使用错误抑制运算符。

在生产环境中,应向用户显示 no PHP错误消息。它们没用,因为它们充满了技术细节,并没有告诉用户如何继续。而是,记录错误并显示您自己的错误消息。

在开发环境中,应向用户显示所有 PHP错误消息。它们是解决问题原因的重要线索,应该尽早发现。

使用Errors and Logging Configuration Options来区分这两个。性能不是决定是否使用@的有用标准。

答案 2 :(得分:6)

“愚蠢的一致性是小脑袋的大人物。” :)说“从不使用它”是一种业余立场,IMO。我更喜欢$ var = @ $ _ POST ['key']到$ var = isset($ _ POST ['key'])? $ _POST ['key']:null;

答案 3 :(得分:2)

是的,它确实以(重要的)方式影响脚本的性能。

阅读文章 PHP Error Suppression Performance

答案 4 :(得分:2)

@本身不是性能问题的原因(顺便说一句,在分析图中几乎不可察觉)。缺少数组指示和未定义的变量会导致通知/警告,这就是减速发生的地方。错误抑制操作符本身没有错误。

使用@$var代替fugly isset($var)?$var:NULL的优点是仍然可以记录调试通知,其中isset完全隐藏它们。

答案 5 :(得分:1)

是的,它会在寻找错误时降低您的性能。所以不,除非你确定不会以这种方式造成更多问题,否则你不应该使用它。