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