2011-06-03 57 views
1

我發現在鏈接類函數時有一些有限的用法,比如$class->setUser('foo')->getInfo()(壞例子),儘管我無法理解如何處理鏈中某個調用產生的任何錯誤。PHP類函數鏈接中的簡單錯誤檢查?

如果setUser()例如出現錯誤,並返回false,它將不會返回$this並且不允許調用另一個函數,從而顯示錯誤。

我實際上剛剛意識到(並糾正我,如果這是錯誤的),會拋出一個異常,如果有錯誤setUser()防止以下getInfo()函數運行併發出錯誤?

這將是至少有用的知識,以便我可以調試使用鏈接的代碼,即使我不使用它。

回答

3

是的,在這種情況下拋出異常可能是一個好主意。您將能夠確定鏈中發生錯誤的位置。

這裏有一個如何可以工作的例子:

try 
{ 
    $class->setUser('foo')->getInfo(); 
} 
catch(UnknownUser $ex) 
{ 
    // setUser failed 
} 
catch(CannotFetchInfo $ex) 
{ 
    // getInfo failed 
} 
+0

我很欣賞這個例子,謝謝Tim。如果有人要問,我更有信心解釋這一點。 – 2011-06-03 21:49:29

1

與任何鏈:如果一個元素得到的破碎,整個產業鏈獲取的破碎。另一方面,如果事情往往因錯誤而失敗(例如,遠程連接,文件等),則鏈接變得尷尬。如果鏈接對象,一方面這可能是非常容易訪問的,另一方面,如果事情由於錯誤而失敗(例如遠程連接,文件等),則鏈接變得尷尬。

所以除非事情沒有返回預期的響應類型,而是指示失敗,異常可以幫助,但是 - 當鏈條斷開時 - 有限的使用。然而,我認爲拋出異常是你可以做錯誤處理的最好的事情(鏈接用於開發自己的代碼)。

拋出異常的好處如下:您不需要銷燬使鏈可訪問的語法。

假設您在代碼中發生了錯誤。無論如何,最好拋出一個Exception來解決它。或者讓我們假設數據層已經被編碼,它經常失敗。拋出異常,那麼你就知道需要更多愛的部分。

在您的一般使用的代碼,具有鏈接,這些exceptions會打斷你(你總是可以追上他們,順便說一句,你可以turn errors into exceptions as well),但他們會指出你錯誤的原因,你可能沒有想過已經夠多了。

所以,

  1. 例外是錯誤處理鏈
  2. 例外幫你找出錯誤的各種來源,同時可以維持鏈語法的數據訪問的更高水平的一種方式。

不管有多好的鏈接,但是出現了它不再有意義的地步(我應該加上「和所有東西一樣」))。我不會說我是一個真正的鏈接迷,但即使作爲一個非粉絲,我也會不時在自己的代碼中使用這個原則。它可以很容易地編寫代碼,所以利用異常處理錯誤,我沒有遇到任何「真正的」(tm)問題。這比用這樣的虛假或者一些廢話來打破你的鏈條要好得多。

理論上你可以返回一個對象,它通過重載獲取任何屬性/成員調用set/get,但即使這很有趣,我認爲它只會引入更多的複雜性,而不是處理實際的,真實的生活錯誤。

所以,如果你鏈接到一個錯誤,你實際上看到錯誤,當你使用一個異常。這就是例外:因爲錯誤(或信號,也適用)而中斷應用程序的標準處理。

+0

謝謝你這個Hakre,我希望我可以+1,儘管我在註冊時遇到了麻煩。 – 2011-06-03 23:26:23