2013-05-01 40 views
0

我注意到在運行時使用php的error_reporting函數似乎會導致它報告以前發生的通知。php調用error_reporting報告以前的嚴格通知

這是設計,還是有辦法阻止它?

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

在上面的代碼,myFunction()調用,提出警告和/或「嚴格」的告示第三方代碼。如果最後一行被註釋掉,則不會返回這些警告和通知。但是,如果我取消該行的註釋,以便錯誤報告可以恢復正常,那麼將在此處報告嚴格的通知,但不報警。

更新 我想,這是不是一個error_reporting問題,我原本以爲,而是與梨,我使用的第三方代碼的問題。

請參見我的文章在php pear mail extension raises strict notices

+0

這不是error_reporting的工作原理。最有可能的是,您稍後也會使用該代碼。 – Wrikken 2013-05-01 19:55:13

+0

@wrikken - 不太清楚你的意思。 'error_reporting'函數應該確定哪些類型的錯誤是在運行時不顯示的 – 2013-05-01 20:12:55

+0

是的,但它不會'保存'錯誤以後,這就是我的意思。如果通過取消該行的註釋來獲得錯誤,那麼錯誤會在該行之後發生。 – Wrikken 2013-05-01 20:14:17

回答

2

我注意到,使用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 
+0

你已經禁止了一個警告,而不是一個嚴格的通知。正如我澄清,這是後來提出的通知 – 2013-05-01 20:09:03

+0

檢查我更新的示例 – hek2mgl 2013-05-01 20:17:29

+0

謝謝,這是一個有用的例子 - 我剛開始嘗試觸發與我正在使用的第三方代碼無關的嚴格通知,以便我可以測試。用你的例子,我得到了人們期望的行爲。然而,我在原帖中描述的情況並非「錯誤」 - 確實發生了。我假設它可能與'error_reporting'有關似乎是不正確的。也許在第三方代碼中有一些異步代碼。 (這是發送電子郵件與梨) – 2013-05-01 20:32:06