在函数调用前面加上 @ 字符

161

这两个PHP函数调用有什么区别?

init_get($somevariable);

@init_get($somevariable);

"@"符号将关闭任何PHP错误和通知。" - Erkan Özkök
5个回答

248

"@"符号将会抑制你的函数可能产生的任何PHP错误。


但是如果在PHP的trigger_error函数前面加上@呢?我在一些代码中看到过这种写法,但它的行为对我来说并不一致。在某些情况下,我确实看到错误被配置的错误处理程序报告,而在其他情况下,似乎没有被报告。 - fritzmg
4
@符号会将 error_reporting 暂时设置为0,但不会"抑制"错误。 - solidgumby

50

40

如已回答,@将停止错误(如果有)的显示。
就性能而言,这不是推荐的方法。

PHP正在做的是:

  • 读取错误显示状态
  • 将错误显示设置为不显示错误
  • 运行您的函数
  • 将错误显示设置为其先前的状态

如果您不想看到任何错误,请使用error_reporting(0);

或者只需编写无错误的代码:P


更倾向于放置零,但如果它有效,那太好了,我不知道 :) - AntonioCS
3
像邮件这样的您无法控制的功能,还有哪些其他选项?我现在正在使用 @,但能以不同的方式做会更好。 - spuas

8

6

正如大家所说,它可以停止特定函数的错误输出。然而,由于必须两次更改错误显示设置,因此这会大大降低性能。我建议不要忽略警告或错误,而是修复代码。


感谢大家的回答。那段代码并不是我写的,我只是出于好奇看了一下phpBB的代码,所以对性能没有任何问题。再次感谢大家。 - nixie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接