【问题标题】:Is there some case when PHP error suppression "@" could be really necessary? [closed]是否真的需要 PHP 错误抑制“@”? [关闭]
【发布时间】:2021-02-12 07:12:02
【问题描述】:

在 PHP 中,可以通过在语句前使用 @ 符号来抑制错误。

例子:

if (@$flag[$i]) {
    ...
}

虽然我看到它在很多地方使用过,但我从未见过真正需要的情况。由于错误抑制还没有从 PHP 中删除(甚至没有被弃用),我可以假设它真的很有用。有人可以指出我真的有必要的情况吗?

【问题讨论】:

  • 基本上,只要您明确地、真正地、真正地不在乎操作是否产生错误,它就很有用。尽管 Stack Overflow 充满了开发人员使用错误抑制运算符然后询问他们的代码为什么不起作用的问题。因此,绝对值得问问自己,您是否明确、真的、真的不在乎操作是否会产生错误。
  • 我唯一看到它可能有用的是绕过对启用了严格警告的可选变量进行isset检查的需要。

标签: php


【解决方案1】:

当您需要调用可能发出错误的函数但您想自己验证原因并根据自己的验证采取措施时,它可能很有用,避免错误从代码中泄漏。例如,在编写库时,这种情况很常见。

【讨论】:

  • 在大多数情况下,try/catch 是更好的方法。
  • 试试 { fopen(...); } 不会禁止发出警告
  • 如果你设置正确,它会的。 stackoverflow.com/questions/2071024/treating-warnings-as-errors(顺便说一句,Laravel 默认会这样做。)
  • @ceejayoz 设置错误处理程序对于库来说可能是非常具有侵入性的。库不应覆盖先前定义的任何处理程序。它可以在运行时设置自己的处理程序,当它的方法被调用时,但是在执行返回给调用者之前有必要恢复前一个处理程序。否则,该库可能会导致正在使用它的人的意外行为。对于一个框架来说,定义一个错误处理程序是可以的(并且是预期的),因为是调用你的代码的框架,而不是相反。
猜你喜欢
  • 1970-01-01
  • 2018-07-15
  • 2018-08-08
  • 2012-10-04
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
相关资源
最近更新 更多