代码之家  ›  专栏  ›  技术社区  ›  Strae

@什么时候有用?

  •  5
  • Strae  · 技术社区  · 16 年前

    如你所知, @ php指令前的字符将禁止引发所有最终警告、错误或通知。

    就我个人而言,我不喜欢这种技术,因为我更喜欢处理这些错误,在现实生活中,错误不可能发生,也不必被管理。

    顺便说一下,我发现这种技术可以应用于许多脚本(CMS插件、开源类)。

    那么,@真的有用吗(在本例中,我们会欣赏一个例子),还是仅仅针对懒惰的开发人员?

    6 回复  |  直到 14 年前
        1
  •  5
  •   lamas    16 年前

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

    尽管php警告通过 @ -签名后,您可以执行某些操作,如向用户显示友好的错误消息。

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

    @$undefinedVariable .= 'some text';
    

    对于错误抑制符号的错误使用,有比上面的例子多得多的例子,您应该只在没有其他更好的方法来实现您想要的时候使用它。

        2
  •  3
  •   user187291    16 年前

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

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

    在制作脚本中,我建议使用 set_error_handler 将错误转换为异常,以及 try 空着 catch 在极少数情况下应忽略错误时阻止:

     try {
        unlink('tempfile');
     } catch(Exception $e) {
       // i don't care
     } 
    
        3
  •  1
  •   fuxia    16 年前

    有一个用例:如果你想测试 scream ,一个禁用@operator的pecl扩展。:)

        4
  •  1
  •   svens    16 年前

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

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

    这就是 @ 又派上用场了。如果附加 @ 对于一个命令,它会导致任何类型的错误,无论如何都会调用错误处理程序,但参数“errno”设置为零。查看PHP错误级别的不同值列表( http://ch.php.net/manual/en/errorfunc.constants.php )它们中没有一个等于零,因此您可以识别在函数中发生的带有前置符的错误 @ . 例如,您可以使用它来“标记”不重要的错误(当您不想中止执行时,但一定要将其记录下来,因为这样有助于调试),或者将其用于其他目的。

        5
  •  1
  •   Toto    16 年前

    唯一有用的情况是:

    如果您没有访问php/apache配置的权限,那么错误将显示给用户。

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

    PS:在一些正式的PHP文档中,您可以看到,不检查文件是否存在,然后删除它,它们只是 @unlink 它。但我不喜欢这样:我更喜欢在日志中发现错误,以防出现问题(访问权限等)。

        6
  •  -1
  •   Xorlev    16 年前

    我真的不喜欢 @ 但有时在某些情况下,这是不可避免的。

    我个人更喜欢在配置中设置php,只记录错误并在生产设置中自动失败,而不是使用 @ 禁止消息的拐杖。

    良好使用:警告。有时函数会发出警告,如果不重新设计,您就无法做任何事情,但它仍然可以正常工作。 @ 将抑制它。