我已經看到噸的線程關於如果PHP函數失敗返回什麼。但他們都是關於PHP 4.返回類型一致性在php5
現在在我最近的(PHP 5)項目中,我想強制執行某種與返回類型的一致性(我甚至不知道,如果它會值得的路)。因此,如果方法的正常返回類型是一個數組,那麼在方法失敗的情況下應該返回什麼?
- 空
- 空數組()
- 拋出一個異常,而不是
在C#中我將返回null,所以我應該寫PHP不斷地思考什麼,我會在一個強類型語言做?或者在這種特定情況下做更有意義的事情?每個選項有什麼優點和缺點?
我已經看到噸的線程關於如果PHP函數失敗返回什麼。但他們都是關於PHP 4.返回類型一致性在php5
現在在我最近的(PHP 5)項目中,我想強制執行某種與返回類型的一致性(我甚至不知道,如果它會值得的路)。因此,如果方法的正常返回類型是一個數組,那麼在方法失敗的情況下應該返回什麼?
在C#中我將返回null,所以我應該寫PHP不斷地思考什麼,我會在一個強類型語言做?或者在這種特定情況下做更有意義的事情?每個選項有什麼優點和缺點?
我會拋出異常的不可恢復的錯誤。
例如,假設您有像getById($ id)這樣的方法。如果沒有發現,則返回null即可。現在讓我們假設你有另一個方法,delete($ id),它本身將調用getById($ id)。在這種情況下,如果找不到任何東西(即:getById返回null),則應拋出異常。請記住,無論何時使用返回值,空數組或空字符串或甚至整數來報告錯誤,您都需要處理此錯誤,可能會根據返回的值在其他位置執行一些清理。這可能會導致所涉及的所有方法/功能中的某些內容變得很髒。
使用異常將允許您僅在一個地方處理和捕獲這些錯誤(在catch處)。所以你不必複製檢查錯誤的代碼(返回一個空數組?是返回值1,2還是9?等)。除此之外,使用異常方便地讓你「目錄」錯誤的類型(如業務邏輯異常,或無效的參數),而沿源寫了很多,如果公司的。
所以,如果一個函數/方法返回的東西(即:它正常終止),返回值是你可以使用(空數組,空,或空字符串,都是有效的返回值)。如果一個函數/方法拋出一個異常,顯然出了問題。
另一個重要的事情是,空可以等於假,0,和一個空字符串,如果你不使用嚴格的檢查(===與==),所以這可能會導致其他類型的錯誤。這也是例外的一個優勢。
和當然,無論你決定,重要的是要與沿碼你的選擇是一致的。
如果執行方法的邏輯沒有錯誤(在這種情況下,我會建議拋出一個異常),我會說返回一個空數組。它將使像這樣的情況下更容易處理:
foreach($obj->method() as $item)
{
// ...
}
如果YourClass::method()
返回null
,我會得到一個「無效的參數提供」警告,而返回一個空數組永遠不會觸發。
無論你最終選擇,堅持它。沒有人喜歡使用返回值不一致的API,並且沒有任何邏輯意義。
如果一個函數真的'失敗',那麼我會去尋找一個異常。例外意味着表示失敗。
儘管如此,在某些時候,您需要決定如何處理異常,然後很可能您決定返回一個空數組可能是最好的。例如,如果您想保持現有的foreach()
環路正常工作,那麼這很有用。
因此,使用異常,但想想你想要捕捉它們並將它們處理成對用戶有用的東西。
如果方法失敗,它應該被歸類爲一個異常IMO,這將允許你正確地捕捉預期的期望並對它們採取行動。
我堅信正常化函數和方法的響應。當你知道函數將返回時,它會讓生活變得更容易。
總之如果失敗拋出和異常,如果它不保證返回一個數組,我的$ 0.02