2010-08-06 37 views
3

在一些遺留代碼中,我運行了大量的Try/Catch語句。 Try/Catch並不是他們在Zend認證課程中教授的東西,10年來我還沒有和另一個使用它的PHP開發人員合作過。與做if語句相比,Try/Catch是否有額外的開銷?什麼會使它比其他選項更受歡迎?PHP - try/catch比if/then有更高的開銷嗎?

+11

關於PHP的課程沒有教導錯誤處理。 – cHao 2010-08-06 16:50:10

+0

try/catch塊是用於錯誤處理還是用於普通流量控制? – 2010-08-06 16:51:10

+0

可能重複的[在PHP中嘗試catch的性能](http://stackoverflow.com/questions/104329/performance-of-try-catch-in-php) – Gordon 2010-08-06 16:52:28

回答

3

try/catch整點是它是非本地的。您可以一次退出多個循環,跳出嵌套的函數調用,從您進入的任何地方逃脫。 if不能這樣做,並不是爲了。我不知道知道左右的開銷,但我強烈而又明智地認爲嫌疑人它有很多如果是。最終,正確使用該工具的工具:它們不可互換。

好了,他們,但他們不應該互換:)

更新:很多人說,try/catch是錯誤處理。他們不是。它們用於異常處理。例如,在很多語言中,試圖從迭代器的最後一個元素中獲取下一個元素將引發異常;這是一個完全有效的例外使用。只要發生意外,必須在當前作用域之外處理(假設您沒有提供回調來處理它),您可以使用它們。

1

當然是的。但是從錯誤處理中獲得的收益要容易得多。

9

我不認爲它們真的是相互關聯的。

如果語句用於確定分支邏輯。

Try/Catch用於處理髮生的錯誤。可以暫停程序的異常可以在Catch塊中處理。

3

Try/catch用於錯誤處理。如果語句是簡單的布爾測試者。他們根本不會做同樣的事情。您應該使用if語句並測試您瞭解的每個條件,但是使用try/catch來進行異常處理。

3

那麼,如果我理解正確,一個try/catch塊添加一個圖層到堆棧。所以是的,可能會有重大的性能問題。但是,通過讓您在需要處理錯誤的地方也可以發揮重要作用,它所帶來的收益也是如此。一個if聲明幾乎沒有開銷。所以要直接回答你的問題,是的,try/catch比if/then有更高的開銷(拋出異常的開銷更大,因爲它爲每次拋出生成一個回溯)。

就這樣說,他們都有自己的目的。例外情況應該用於例外條件。你應該使用它們來檢測出錯的東西,這些東西不在正常的失敗範圍之內。例如,如果用戶在註冊頁面上沒有輸入足夠長的密碼,則不會引發異常。但是如果您無法連接到數據庫以執行註冊,則會引發異常。一個是邏輯錯誤,另一個是需要中斷正常程序流的條件。