@什么时候变得有用?

时间:2010-03-27 19:06:17

标签: php error-handling

如您所知,php istruction之前的@个字符会抑制每个最终的警告,错误或通知。

就个人而言,我不喜欢这个技术,因为我更愿意处理这些错误,而在现实生活中,错误一定不会发生或必须进行管理。

顺便说一句,我发现这个tecnique适用于许多脚本(cms插件,开源类)。

那么,@真的有用吗(在这种情况下,一个例子会受到赞赏),还是只适合懒惰的开发人员?

6 个答案:

答案 0 :(得分:5)

例如,想一想mysql_connect电话失败。在这种情况下,您可能希望禁止向用户显示的错误消息(也显示您通常不希望任何其他人看到的一些详细信息)。

虽然通过@ - 符号禁止了PHP警告,但您可以执行某些操作,例如之后向用户显示友好的错误消息。

然而,对于以下示例中的内容“误用”@绝对不是一个好主意:

@$undefinedVariable .= 'some text';

有很多错误使用错误抑制标志的例子比上面的错误,你应该只在没有其他更好的方法来实现你想要的东西时使用它。

答案 1 :(得分:3)

你的问题的答案很简单直接:不,@没用,实际上有害,不应该使用。从不。

我唯一能想到的例外是快速的“一次运行”脚本,当你真的不关心代码质量和正确性时。

在生产脚本中,我建议使用set_error_handler将错误转换为异常,并try使用空catch块,在极少数情况下应忽略错误:

 try {
    unlink('tempfile');
 } catch(Exception $e) {
   // i don't care
 } 

答案 2 :(得分:1)

有一个用例:如果要测试scream,则禁用@运算符的PECL扩展。 :)

答案 3 :(得分:1)

我有点晚了,但在PHP中使用@通常不是一个好主意。我只将它用于测试代码,当然不能用于生产。

更好的处理错误的方法是使用set_error_handler函数(http://ch.php.net/set_error_handler)。如果出现问题,您只需记录错误(并可能通知管理员),然后向用户显示自定义错误消息,或者如果它只是通知/警告,您可能会忽略它。 (你可能已经这样做了。)

这就是@再次派上用场的地方。如果将@附加到命令并导致任何类型的错误,则无论如何都将调用错误处理程序,但参数“errno”设置为零。看看php错误级别(http://ch.php.net/manual/en/errorfunc.constants.php)的不同值列表。它们都不等于零,因此您可以使用前置@来识别函数中出现的错误。例如,您可以使用它来“标记”不重要的错误(当您不想中止执行时,但确保无论如何都要记录它,因为它可能有助于调试)或将其用于其他目的。

答案 4 :(得分:1)

唯一有用的情况是:

如果您无法访问php / apache配置,则会向用户显示错误。

否则,永远不要使用@...并将错误(在php / apache配置中)重定向到某个日志系统(文件,数据库等)。

PS:在一些官方的PHP文档中,您可以看到,不是检查文件是否存在然后将其删除,而是简单地@unlink它。但我不喜欢它:如果出现问题(访问权限等),我更喜欢在日志中收到错误。

答案 5 :(得分:-1)

我真的不喜欢@,但有时在某些设置中它是不可避免的。

我个人更喜欢在配置中设置PHP以仅记录错误并在生产设置上静默失败,而不是使用@拐杖来抑制消息。

好用:警告。有时函数会抛出警告,如果没有重新设计,你就无法做任何事情,但它仍能正常工作。 @会压制它。