簡體   English   中英

開發的推薦error_reporting()設置是什么? 那么E_STRICT呢?

[英]What is the recommended error_reporting() setting for development? What about E_STRICT?

通常我使用E_ALL來查看PHP可能會對我的代碼所說的任何內容,以嘗試改進它。

我剛剛注意到一個錯誤常量E_STRICT ,但是從未使用或聽說過它,這是一個很好的設置用於開發嗎? 手冊說:

運行時通知。 允許PHP建議對代碼進行更改,以確保代碼的最佳互操作性和向前兼容性。

所以我想知道我是否使用了與E_ALL最佳的error_reporting級別,或者它與E_STRICT一起是最好的嗎? 或者還有其他我尚未學習的組合嗎?

在PHP 5中, E_STRICT涵蓋的E_STRICT不在E_ALL ,因此要獲得最多信息,您需要將它們組合在一起:

 error_reporting(E_ALL | E_STRICT);

在PHP 5.4中, E_STRICT將包含在E_ALL ,因此您只能使用E_ALL

你也可以使用

error_reporting(-1);

這將始終啟用所有錯誤。 哪個在語義上更正確:

error_reporting(~0);

在php.ini中使用以下內容:

error_reporting = E_ALL | E_STRICT

此外,你應該安裝Xdebug ,它可以突出你的錯誤明亮的顏色和打印​​有用的詳細信息。

永遠不要在代碼中出現任何錯誤或通知,即使它是無害的。

在我看來,你在開發階段設置錯誤報告級別越高越好。

在實時環境中,您需要稍微(但只是略微)減少的設置,但是您希望它們記錄在某個用戶無法看到的位置(我更喜歡syslog )。

http://php.net/error_reporting

E_ALL | E_STRICT E_ALL | E_STRICT用於5.2.0之前的PHP開發。

5.2介紹了E_RECOVERABLE_ERROR和5.3引入了E_DEPRECATEDE_USER_DEPRECATED 如果你正在運行其中一個版本,你可能想要打開它們。

如果你想使用魔術數字,你可以將error_reporting值設置為一個相當高的值2^n-1 - 比如16777215 ,這實際上只是打開1..n之間的所有位。 但我不認為使用魔術數字是個好主意......

在我看來,由於E_ALL並非真的全部,PHP已經放棄了一些球。 但顯然它將在PHP 6中得到修復......

您可以使用error_reporting = -1
它將始終包含所有位(即使它們不在E_ALL中)

在較新的PHP版本中,E_ALL包含更多類錯誤。 從PHP 5.3開始,E_ALL包含 E_STRICT 之外的所有內容。 在PHP 6中,它甚至會包括它。 這是一個很好的提示:最好看到更多錯誤消息而不是更少。

E_ALL中包含的內容記錄在在線手冊的PHP預定義常量頁面中。

就個人而言,如果您使用E_STRICT,我認為這並不重要。 它肯定不會對你造成傷害,特別是因為它可能會阻止你編寫在未來PHP版本中很容易被破壞的腳本。 另一方面,在某些情況下,嚴格的消息可能過於嘈雜,尤其是如果你趕時間的話。 我建議您默認打開它,當它變得煩人時將其關閉。

根據您對此代碼的長期支持計划,啟用E_STRICT調試可能有助於您的代碼在不久的將來繼續工作,但對於日常使用來說可能有點過分。 關於E_STRICT有兩個重要的事項要記住:

  1. 根據手冊 ,大多數E_STRICT錯誤是在編譯時生成的,而不是運行時生成的。 如果您在代碼中將錯誤級別增加到E_ALL (而不是通過php.ini ),那么您可能永遠不會看到E_STRICT錯誤。
  2. E_STRICT包含在PHP 6下的E_ALL ,但不包含在PHP 5中。如果您將服務器升級到PHP6,並按照上面#1中的描述配置E_ALL ,您將開始看到E_STRICT錯誤,而無需您進行任何其他更改。

嚴格來說,不是error_reporting,我強烈建議使用任何自動顯示解析錯誤和常見故障的IDE(例如,條件賦值)。

的Zend Studio for Eclipse可以在默認情況下啟用此功能,因為我開始使用它,它一直在幫助我很多 ,在發生之前就捕捉錯誤。

例如,我有這段代碼,我在$GLOBALS變量中緩存了一些數據,但我無意中寫了$_GLOBALS 數據永遠不會被緩存,我永遠不知道Zend是否沒有告訴我:“嘿,這個$_GLOBALS東西只出現一次,這可能是一個錯誤”。

的ini_set( “display_errors設置”, “2”); 的error_reporting(E_ALL);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM