根據我設置的錯誤報告,我的web應用程序可以工作或顯示大量錯誤。我的印象是,我不需要在PHP中啓動變量,但設置第二個錯誤報告似乎需要它。這是怎麼回事?我應該通過並啓動我的所有變量嗎?修復vs隱藏PHP中的「未定義變量」錯誤
error_reporting(E_ALL^E_NOTICE);
error_reporting(E_ALL | E_STRICT);
根據我設置的錯誤報告,我的web應用程序可以工作或顯示大量錯誤。我的印象是,我不需要在PHP中啓動變量,但設置第二個錯誤報告似乎需要它。這是怎麼回事?我應該通過並啓動我的所有變量嗎?修復vs隱藏PHP中的「未定義變量」錯誤
error_reporting(E_ALL^E_NOTICE);
error_reporting(E_ALL | E_STRICT);
您正在詢問是否禁止未初始化變量的警告,但是您發佈的代碼禁止所有全部E_NOTICE
警告。這不是完全相同的事情,但它可以直接接近你所要求的東西;沒有辦法只壓制未初始化的變量通知。
從某種意義上說,通知可能是所有最重要的警告/錯誤信息,因爲它們指出潛在的logic errors,這是最難識別和修復的。
考慮你的選擇:
E_NOTICE
警告。我建議去#2。這是更多的工作,但一個適時的E_NOTICE
可能只會爲你節省一整天的麻煩。
謝謝,鳳凰,很有道理。 – Chords 2012-03-16 19:52:57
如果您在初始化之前引用標識符,您將收到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
所以,一定要參考它在我們的代碼之前聲明的標識符/變量,你會很安全。
PHP試圖通過發佈警告來幫助你 - 這是一個非常好的主意,注意到它們。
你的代碼可能工作,但PHP說你沒有想過什麼 - 比如初始化一個變量。
就我個人而言,儘可能多的警告。我們都會偶爾發生錯誤或忘記一些事情。口譯員會幫助你確保它告訴你這些事情。充分利用它的能力。
你跑到什麼是警告和錯誤之間的區別。警告意味着「這可能不會產生你建議的輸出」,錯誤意味着「這不正確」。如果您的應用程序無法正常工作,則可以毫無問題地取消警告。但是,如果出現奇怪的行爲,則打開E_STRICT警告可能會導致您遇到代碼中的錯誤。例如,如果您試圖遍歷數組,但它永遠不會產生任何結果,則打開E_STRICT警告可能會提醒您,在嘗試循環數組之前未對數組進行初始化。
一般而言,您將關閉生產環境中的E_STRICT警告。在使用它們之前,確保變量已初始化通常只是一種很好的做法。
我不同意 - 我不關掉它 - 在我的生產環境中,發出通知/錯誤時會記錄到文件中,而不是發送給用戶。即我想知道生產環境是否有問題,但在開發中我更喜歡它在屏幕上。生產環境可以定期檢查日誌文件是否有其他任何這些消息, – 2012-03-16 19:20:11
@Ed Heal:一個很好的折衷方案。 – Jason 2012-03-16 20:50:25
相關:http://程序員。stackexchange.com/q/130143/34530 – 2012-03-16 19:03:57
啓動一個變量?你能發佈一些失敗的小代碼片段嗎? – 2012-03-16 19:04:51