【问题标题】:php calling error_reporting reports previous strict noticesphp 调用 error_reporting 报告以前的严格通知
【发布时间】:2013-04-25 21:01:18
【问题描述】:

我注意到在运行时使用 php 的 error_reporting 函数似乎会导致它报告以前发生的通知。

这是设计使然,还是有办法阻止它?

$er = error_reporting(E_ERROR);
$m = new MyClass();
$m->myFunction();
//error_reporting($er);  

在上述代码中,myFunction() 调用引发警告和/或“严格”通知的第 3 方代码。如果最后一行像上面一样被注释掉,则不会返回那些警告和通知。但是,如果我取消注释该行以便错误报告可以恢复正常,则会在此时报告严格通知,而不是警告。

更新 我认为这不是我最初认为的 error_reporting 的问题,而是我正在使用的第 3 方代码 Pear 的问题。

php pear mail extension raises strict notices查看我的帖子

【问题讨论】:

  • error_reporting 不是这样工作的。很可能,您稍后也会使用该代码。
  • @wrikken - 不太清楚你的意思。 error_reporting 函数确实应该设置运行时显示和不显示的错误类型
  • 是的,但它不会“保存”错误以备后用,这就是我的意思。如果通过取消注释该行得到错误,则错误发生在 该行之后。
  • 请注意,您的困惑很可能是:(1)将错误报告设置为低(2)包括函数定义/类/等(3)将错误报告设置为高(4)现在使用这些函数和类报告错误,include-ing 他们低错误报告对调用时触发的错误报告没有任何作用。
  • 我理解您为什么认为错误随后会发生,但这些是唯一的代码行。没有什么可以触发错误的了。也许 myFunction 调用的第 3 方代码正在异步运行,直到稍后才真正执行……尽管我对此表示怀疑。

标签: php error-suppression


【解决方案1】:

我注意到在运行时使用 php 的 error_reporting 函数似乎会导致它报告以前发生的通知。

您所说的只是与您尚未发布的部分代码相关的常规行为。检查我的例子。它将静态调用非静态方法,这将导致 E_STRICT 消息:

Class A { 
    public function notStatic() {}
}

$a = new A();

error_reporting(~E_ALL);
$a::notStatic();   // ... silence

error_reporting(E_ALL);
$a::notStatic();   // Strict standards: Non-static method A::notStatic() should not be called statically in 

【讨论】:

  • 您隐藏了一个警告,而不是一个严格的通知。正如我澄清的那样,这是随后提出的通知
  • 谢谢,这是一个有用的例子——我刚刚开始尝试触发与我正在使用的第 3 方代码无关的严格通知,以便我可以测试。使用您的示例,我得到了人们期望的行为。然而,我在原帖中描述的情况并不是“错误的”——它确实正在发生。我认为它可能与error_reporting 有关的假设似乎是不正确的。可能在 3rd-party 代码中有一些异步代码。 (使用 Pear 发送电子邮件)
  • 谢谢 - 你完全正确,我已经在stackoverflow.com/questions/16326502/… 发布了一个更直接的问题
猜你喜欢
  • 2020-02-15
  • 1970-01-01
  • 2013-05-13
  • 2011-08-09
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
相关资源
最近更新 更多