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