2012-01-17 31 views
2

我已經看到噸的線程關於如果PHP函數失敗返回什麼。但他們都是關於PHP 4.返回類型一致性在php5

現在在我最近的(PHP 5)項目中,我想強制執行某種與返回類型的一致性(我甚至不知道,如果它會值得的路)。因此,如果方法的正常返回類型是一個數組,那麼在方法失敗的情況下應該返回什麼?

  • 空數組()
  • 拋出一個異常,而不是

在C#中我將返回null,所以我應該寫PHP不斷地思考什麼,我會在一個強類型語言做?或者在這種特定情況下做更有意義的事情?每個選項有什麼優點和缺點?

回答

1

我會拋出異常的不可恢復的錯誤。

例如,假設您有像getById($ id)這樣的方法。如果沒有發現,則返回null即可。現在讓我們假設你有另一個方法,delete($ id),它本身將調用getById($ id)。在這種情況下,如果找不到任何東西(即:getById返回null),則應拋出異常。請記住,無論何時使用返回值,空數組或空字符串或甚至整數來報告錯誤,您都需要處理此錯誤,可能會根據返回的值在其他位置執行一些清理。這可能會導致所涉及的所有方法/功能中的某些內容變得很髒。

使用異常將允許您僅在一個地方處理和捕獲這些錯誤(在catch處)。所以你不必複製檢查錯誤的代碼(返回一個空數組?是返回值1,2還是9?等)。除此之外,使用異常方便地讓你「目錄」錯誤的類型(如業務邏輯異常,或無效的參數),而沿源寫了很多,如果公司的。

所以,如果一個函數/方法返回的東西(即:它正常終止),返回值是你可以使用(空數組,空,或空字符串,都是有效的返回值)。如果一個函數/方法拋出一個異常,顯然出了問題。

另一個重要的事情是,空可以等於假,0,和一個空字符串,如果你不使用嚴格的檢查(===與==),所以這可能會導致其他類型的錯誤。這也是例外的一個優勢。

和當然,無論你決定,重要的是要與沿碼你的選擇是一致的。

3

如果執行方法的邏輯沒有錯誤(在這種情況下,我會建議拋出一個異常),我會說返回一個空數組。它將使像這樣的情況下更容易處理:

foreach($obj->method() as $item) 
{ 
    // ... 
} 

如果YourClass::method()返回null,我會得到一個「無效的參數提供」警告,而返回一個空數組永遠不會觸發。

無論你最終選擇,堅持它。沒有人喜歡使用返回值不一致的API,並且沒有任何邏輯意義。

1

如果一個函數真的'失敗',那麼我會去尋找一個異常。例外意味着表示失敗。

儘管如此,在某些時候,您需要決定如何處理異常,然後很可能您決定返回一個空數組可能是最好的。例如,如果您想保持現有的foreach()環路正常工作,那麼這很有用。

因此,使用異常,但想想你想要捕捉它們並將它們處理成對用戶有用的東西。

1

如果方法失敗,它應該被歸類爲一個異常IMO,這將允許你正確地捕捉預期的期望並對它們採取行動。

我堅信正常化函數和方法的響應。當你知道函數將返回時,它會讓生活變得更容易。

總之如果失敗拋出和異常,如果它不保證返回一個數組,我的$ 0.02