注意:首先,我意识到99%的PHP开发人员都使用错误抑制运算符(我曾经是其中的一个),所以我希望看到这一点的所有PHP开发人员都不同意。
您认为在PHP中使用@运算符来抑制错误/警告是否有效,而您可能正在处理该错误?
简短的回答:
不!
更长一点的正确答案:
我不知道,因为我不了解所有事情,但是到目前为止,我还没有遇到过一个很好的解决方案。
不好的原因:
在我认为使用PHP大约7年的时间里,我已经看到由错误抑制运算符引起的无尽调试痛苦,并且从未遇到过不可避免的情况。
问题是您正在抑制错误的代码段当前可能仅导致您看到的错误;但是,当您更改被禁止的行所依赖的代码或运行它的环境时,该行很有可能会尝试输出与您尝试忽略的错误完全不同的错误。那么,如何找到未输出的错误呢?欢迎调试地狱!
我花了很多年的时间才意识到由于被抑制的错误,我每两个月浪费了多少时间。多数情况下(但非排他性地),这是在安装了第三方脚本/应用程序/库之后,该脚本在开发人员环境中没有错误,但是由于php或服务器配置的差异或缺少依赖关系(通常会立即输出错误)而无法获取提醒问题出在哪里,但当开发人员添加魔术@时则不会。
备选方案(取决于情况和预期结果):
处理您所知道的实际错误,因此,如果一段代码要引起某个错误,则该代码不会在特定情况下运行。但是我认为您已经掌握了这一部分,您只是担心最终用户会看到错误,这就是我现在要解决的问题。
对于常规错误,您可以设置错误处理程序,以便在查看页面时以所需的方式输出错误,但对最终用户隐藏并记录下来,以便您知道用户触发了哪些错误。
对于display_errors
在php.ini中将致命错误设置为关闭(错误处理程序仍被触发)的情况,并启用错误日志记录。如果您同时具有开发服务器和实时服务器(建议使用),则在开发服务器上无需执行此步骤,因此您仍然可以调试这些致命错误,而不必诉诸于错误日志文件。使用关闭功能甚至还可以技巧性地向您的错误处理程序发送大量致命错误。
综上所述:
请避免。可能有一个很好的理由,但是我还没有看到一个理由,所以直到那一天,我认为(@)错误抑制运算符是有害的。
如果需要更多信息,可以在PHP手册的“错误控制运算符”页面上阅读我的评论。