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

Gau*_*rav 12 php

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

Hai*_*vgi 22

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

特别是"@有其用途"部分:

现在,我们应该@非常谨慎地使用运算符,处理错误而不是抑制错误.但是我可以想到很少的情况可能需要抑制一些PHP错误.我举两个例子:

  • 您可能正在使用一些使用了它的大型外部库@,因此需要能够忽略这些错误作为库的作者,否则您的程序将在不需要的地方绊倒.您可以编辑库,但可能需要花费很多时间,并且每次作者发布库更新时都必须再次应用您的更改.

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

  • 在那里描述的两种情况中,第一种情况有一些优点.你被困在写得不好的图书馆,你需要处理它.然而,第二个可以通过使用自定义错误处理程序抛出`ErrorException`s然后处理这些来以更优雅的方式解决.http://www.php.net/manual/en/class.errorexception.php (3认同)

Osw*_*ald 7

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

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

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

使用错误和日志配置选项来区分这两个.性能不是决定是否使用@的有用标准.


gra*_*rks 6

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