如您所知,php istruction之前的@
个字符会抑制每个最终的警告,错误或通知。
就个人而言,我不喜欢这个技术,因为我更愿意处理这些错误,而在现实生活中,错误一定不会发生或必须进行管理。
顺便说一句,我发现这个tecnique适用于许多脚本(cms插件,开源类)。
那么,@真的有用吗(在这种情况下,一个例子会受到赞赏),还是只适合懒惰的开发人员?
答案 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以仅记录错误并在生产设置上静默失败,而不是使用@
拐杖来抑制消息。
好用:警告。有时函数会抛出警告,如果没有重新设计,你就无法做任何事情,但它仍能正常工作。 @
会压制它。