2012-03-16 89 views
0

根據我設置的錯誤報告,我的web應用程序可以工作或顯示大量錯誤。我的印象是,我不需要在PHP中啓動變量,但設置第二個錯誤報告似乎需要它。這是怎麼回事?我應該通過並啓動我的所有變量嗎?修復vs隱藏PHP中的「未定義變量」錯誤

error_reporting(E_ALL^E_NOTICE); 

error_reporting(E_ALL | E_STRICT); 
+0

相關:http://程序員。stackexchange.com/q/130143/34530 – 2012-03-16 19:03:57

+0

啓動一個變量?你能發佈一些失敗的小代碼片段嗎? – 2012-03-16 19:04:51

回答

1

您正在詢問是否禁止未初始化變量的警告,但是您發佈的代碼禁止所有全部E_NOTICE警告。這不是完全相同的事情,但它可以直接接近你所要求的東西;沒有辦法只壓制未初始化的變量通知。

從某種意義上說,通知可能是所有最重要的警告/錯誤信息,因爲它們指出潛在的logic errors,這是最難識別和修復的。

考慮你的選擇:

  1. 禁止ALLE_NOTICE警告。
  2. 修復代碼中的所有未初始化的變量。

我建議去#2。這是更多的工作,但一個適時的E_NOTICE可能只會爲你節省一整天的麻煩。

+0

謝謝,鳳凰,很有道理。 – Chords 2012-03-16 19:52:57

0

如果您在初始化之前引用標識符,您將收到notice錯誤。

例如:

echo $variable; // is referencing to $variable which is not set before 
echo $arrayname['indexname'] // it is also referencing to indexname item of array, 
// if not found it will index another notice error 

所以,一定要參考它在我們的代碼之前聲明的標識符/變量,你會很安全。

1

PHP試圖通過發佈警告來幫助你 - 這是一個非常好的主意,注意到它們。

你的代碼可能工作,但PHP說你沒有想過什麼 - 比如初始化一個變量。

就我個人而言,儘可能多的警告。我們都會偶爾發生錯誤或忘記一些事情。口譯員會幫助你確保它告訴你這些事情。充分利用它的能力。

0

你跑到什麼是警告和錯誤之間的區別。警告意味着「這可能不會產生你建議的輸出」,錯誤意味着「這不正確」。如果您的應用程序無法正常工作,則可以毫無問題地取消警告。但是,如果出現奇怪的行爲,則打開E_STRICT警告可能會導致您遇到代碼中的錯誤。例如,如果您試圖遍歷數組,但它永遠不會產生任何結果,則打開E_STRICT警告可能會提醒您,在嘗試循環數組之前未對數組進行初始化。

一般而言,您將關閉生產環境中的E_STRICT警告。在使用它們之前,確保變量已初始化通常只是一種很好的做法。

+0

我不同意 - 我不關掉它 - 在我的生產環境中,發出通知/錯誤時會記錄到文件中,而不是發送給用戶。即我想知道生產環境是否有問題,但在開發中我更喜歡它在屏幕上。生產環境可以定期檢查日誌文件是否有其他任何這些消息, – 2012-03-16 19:20:11

+0

@Ed Heal:一個很好的折衷方案。 – Jason 2012-03-16 20:50:25