[英]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_DEPRECATED
和E_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
有兩個重要的事項要記住:
E_STRICT
錯誤是在編譯時生成的,而不是運行時生成的。 如果您在代碼中將錯誤級別增加到E_ALL
(而不是通過php.ini ),那么您可能永遠不會看到E_STRICT
錯誤。 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.