首先我知道這個問題已經圍繞不止一次在這裏:E_NOTICE:修復每一個問題真的有用嗎?
但更多的,我解決所有E_NOTICEs(因爲有人說你應該)越我注意到:
- 我微優化
- 其實我做更多的代碼,使我的代碼難於十個分量和慢
拿一個例子:
說使用MongoDB的PHP驅動你的,你必須在一個名爲ts
內一類變種一個MongoDate
對象一個表示數據庫集合中單個行的類。現在你訪問這個變量,如:$obj->ts->sec
但PHP拋出一個合適的(E_NOTICE),因爲在這種情況下ts
沒有被定義爲一個對象本身,因爲這個特定的行沒有ts
字段。所以你認爲這是好的,如果它沒有設置返回null,這是我們期望的行爲,並且我會在解釋器自己的機器人工作之外自己處理它(因爲如果var是功能,則返回1970
null
或none-object
)。
但現在要修復E_NOTICE作爲另一個開發人員真的希望我,因爲有任何E_NOTICEs是terribad,並且它使代碼變得更慢,不根據錯誤執行它。所以我做的$obj
類的新功能叫getTs
,我給它3條線路,從字面上做什麼,但檢查ts
var是一個MongoDate
對象並返回它,如果它是...
爲什麼?在應用程序本身的運行時間內,PHP不能在它的快速解釋器中爲我完成這項工作嗎?我的意思是每一處我不得不爲我的代碼添加無用的凹凸,幾乎空的函數來檢測變量,我實際上只是用PHP自己處理的能力來返回null
或檢查他們的instanceof
當我真的需要時(當它是至關重要的操作和行爲的功能),並沒有讓我開始在isset()
s我已經添加了約300行isset()
s,它已經失控。我當然得讓這個getTs
功能,因爲你不能做的:
class obj{
public $ts = new MongoDate();
}
我要麼必須存儲__constructor
內的ts
(這我不是太高興要麼,我使用了很多)或者使用函數來檢測它是否已設置(我現在所做的)。
我的意思我明白爲什麼我應該修正:
- 未定義瓦爾
- 分配未設置瓦爾的性質(
null
增值經銷商) - 恆錯誤等
但是,如果你已經測試你的代碼,你知道它是安全的,只會按照你想要的方式工作,修復所有的undefined index
或none-object
er RORS?是不是加了一堆isset()
s和2行函數來實際對你的代碼進行微優化?
我已經做了一半的網站E_NOTICE兼容,實際上它使用更多的CPU,內存和現在時間後發現......所以真的有什麼處理每一個E_NOTICE錯誤點,而不是僅僅是錯誤的呢?
感謝您的想法,
你不應該。相反,你應該處理異常。但是...歡迎來到PHP! – 2012-07-16 18:34:44
@ IgnacioVazquez-Abrams事實上,PHP應該是一種動態語言,但是修復所有這些'E_NOTICES'我認爲至少有1000個人認爲不要在他們的市場營銷中宣傳動態,但更多的是...... – Sammaye 2012-07-16 18:44:25
你'我們會發現PHP是90%的營銷,9%的努力和1%的瘋狂。 – 2012-07-16 18:46:38