在一些遺留代碼中,我運行了大量的Try/Catch語句。 Try/Catch並不是他們在Zend認證課程中教授的東西,10年來我還沒有和另一個使用它的PHP開發人員合作過。與做if語句相比,Try/Catch是否有額外的開銷?什麼會使它比其他選項更受歡迎?PHP - try/catch比if/then有更高的開銷嗎?
回答
try/catch
整點是它是非本地的。您可以一次退出多個循環,跳出嵌套的函數調用,從您進入的任何地方逃脫。 if
不能這樣做,並不是爲了。我不知道知道左右的開銷,但我強烈而又明智地認爲嫌疑人它有很多如果是。最終,正確使用該工具的工具:它們不可互換。
好了,他們,但他們不應該互換:)
更新:很多人說,try/catch
是錯誤處理。他們不是。它們用於異常處理。例如,在很多語言中,試圖從迭代器的最後一個元素中獲取下一個元素將引發異常;這是一個完全有效的例外使用。只要發生意外,必須在當前作用域之外處理(假設您沒有提供回調來處理它),您可以使用它們。
當然是的。但是從錯誤處理中獲得的收益要容易得多。
我不認爲它們真的是相互關聯的。
如果語句用於確定分支邏輯。
Try/Catch用於處理髮生的錯誤。可以暫停程序的異常可以在Catch塊中處理。
Try/catch用於錯誤處理。如果語句是簡單的布爾測試者。他們根本不會做同樣的事情。您應該使用if語句並測試您瞭解的每個條件,但是使用try/catch來進行異常處理。
那麼,如果我理解正確,一個try/catch塊添加一個圖層到堆棧。所以是的,可能會有重大的性能問題。但是,通過讓您在需要處理錯誤的地方也可以發揮重要作用,它所帶來的收益也是如此。一個if
聲明幾乎沒有開銷。所以要直接回答你的問題,是的,try/catch比if/then有更高的開銷(拋出異常的開銷更大,因爲它爲每次拋出生成一個回溯)。
就這樣說,他們都有自己的目的。例外情況應該用於例外條件。你應該使用它們來檢測出錯的東西,這些東西不在正常的失敗範圍之內。例如,如果用戶在註冊頁面上沒有輸入足夠長的密碼,則不會引發異常。但是如果您無法連接到數據庫以執行註冊,則會引發異常。一個是邏輯錯誤,另一個是需要中斷正常程序流的條件。
- 1. MatLab'catch'比'try'更高嗎?
- 2. C++比PHP有更少的功能嗎?
- 3. Objective-C屬性(self.foo)比使用ivars(_foo)有更多的開銷嗎?
- 4. 比較float比double更高效嗎?
- 5. 框架比較和開銷
- 6. 框架比較和開銷
- 7. 比if語句更高效嗎?
- 8. 可以調度開銷比實際的線程工作更昂貴嗎?
- 9. glMultMatrix/glLoadMatrix比glRotatef或glTranslatef更高效嗎?
- 10. putImageData(...)比drawImage(...)更高性能嗎?
- 11. XML :: Twig:parsefile()比parse()更高效嗎?
- 12. MySQL比文件系統更高效嗎?
- 13. UIActionView打開比它應該更高
- 14. HTTP上傳有很多開銷嗎?
- 15. 有什麼更好的註銷在PHP?
- 16. 任何語言比PHP更適合Web開發嗎?
- 17. ZeroMQ經銷商與經銷商的高延遲相比,winsock
- 18. 把線頭睡得太高的開銷?
- 19. PHP異常真的比錯誤更有用嗎? (Adv)
- 20. ROR:比其他人更高的開發速度?
- 21. Quercus(Java)比原生PHP更快嗎?
- 22. 有更高階條件的語言嗎?
- 23. 查詢時間比'沒有'更高
- 24. 有什麼比Django的flatpage更好嗎?
- 25. BoundStatement比Cassandra中的SimpleStatement更有效嗎?
- 26. 是連接少模式需要更多的開銷嗎?
- 27. 在PHP中,printf比變量插值更有效嗎?
- 28. 在PHP中包含長時間函數收集有很多開銷嗎?
- 29. 比雙重嵌套的ArrayList更高效嗎?
- 30. 你能推薦一些比java.util.Properties更高級的東西嗎?
關於PHP的課程沒有教導錯誤處理。 – cHao 2010-08-06 16:50:10
try/catch塊是用於錯誤處理還是用於普通流量控制? – 2010-08-06 16:51:10
可能重複的[在PHP中嘗試catch的性能](http://stackoverflow.com/questions/104329/performance-of-try-catch-in-php) – Gordon 2010-08-06 16:52:28