拋出新異常時,最好僅在沒有異常需要拋出時返回true。另外最好是返回false而不是拋出異常。我使用PHP。拋出異常和返回類型
4
A
回答
13
這一切都取決於你在做什麼。就個人而言,我用他們所有的時間,這樣我就不必檢查返回值(A愚蠢的,而是說明性的例子):
function ArrayToObject(array $array) {
$obj = new StdClass();
foreach ($array as $key => $value) {
if (!is_string($key)) {
throw new Exception('Expects only string keys in the array');
}
$obj->$key = $value;
}
return $obj;
}
這樣一來,我可以這樣做:
$array = array('foo' => 'bar');
try {
echo ArrayToObject($array)->foo; //Prints "bar"
} catch (Exception $e) {
//Handle error here
}
它可以讓你不用擔心錯誤檢查你的結果。您可以在catch塊中正確處理錯誤。
所以,不,不會改變你要去基於例外返回什麼......讓例外處理錯誤,併爲你改變工作流程...
一個更真實的例子(以僞代碼):
try {
open database connection;
send query to database;
operate on results;
} catch (DatabaseConnectionException $e) {
handle failed connection here;
} catch (DatabaseQueryException $e) {
handle failed query here;
} catch (Exception $e) {
handle any other errors here;
}
很顯然,這是假設你的數據庫函數/方法拋出這些異常...
0
這取決於你的函數的目的和回國的原因。 使用異常在錯誤/意外情況期間從函數返回。使用標準操作的返回值。
同樣,不要使用返回值來標記意外情況。如果你的函數 不會返回任何有意義的空指針引用,除以零,沒有數據連接,你應該拋出異常。一,它讓你用catch塊隔離你的錯誤處理代碼。二,它可以讓你提供更多的信息,爲什麼它失敗而不是'錯誤'。非常惱人的事情失敗時,所有的信息只是'錯誤'。
此外,您不想拋出異常作爲流量控制的替代方法。你可以變得富有創造性並且寫一個比較函數,如果它是平等的,它就什麼都不做,如果不相等則拋出一個GreaterThanException或LessThanException。但是,現在你已經失去了分離錯誤處理代碼的優勢(因爲標準處理代碼現在包含在catch塊中並且包含錯誤代碼)。另外,雖然我不確定在許多環境(如php)中執行異常處理的情況,但創建異常對象並對catch塊進行類型比較而非僅僅返回可能會更昂貴。
相關問題
- 1. 拋出異常後返回
- 2. Activator.CreateInstance(類型)拋出異常
- 3. CType和類型拋出異常
- 4. 拋出異常或返回值
- 5. 返回java.util.Optional或拋出(Checked/Unchecked)異常
- 6. 返回null或拋出異常一次
- 7. GWT - 拋出異常VS返回null
- 8. 返回值並拋出異常?
- 9. 返回NaN還是拋出異常?
- 10. 返回錯誤並拋出異常
- 11. 只返回沒有異常拋出
- 12. 類拋出異常
- 13. 對象類拋出類拋出異常
- 14. WPF,類型'System.ExecutionEngineException'的異常被拋出
- 15. 異常的類型'System.Windows.Forms.AxHost + InvalidActiveXStateException'被拋出
- 16. 異常的類型'System.outOfmemoryException被拋出'
- 17. 什麼異常的類型拋出
- 18. 拋出'System.Data.StrongTypingException'類型的異常C#
- 19. ModelState.IsValid拋出一個異常類型System.IO.FileLoadException
- 20. 類型'system.outofmemoryexception'的異常被拋出
- 21. 拋出「Microsoft.WindowsAzure.StorageClient.StorageClientException」類型的異常
- 22. 拋出異常返回內存異常錯誤
- 23. ASP.NET WebService在拋出異常時返回異常字符
- 24. 魔術異常拋出拋出異常
- 25. 類拋出異常HashSet
- 26. 類拋出異常:android.widget.textview
- 27. java:類拋出異常
- 28. C# - 拋出異常類
- 29. Axis2類拋出異常
- 30. Java:異常拋出類?