我試圖弄清楚PHP中的throw new Exception
後面的代碼是否仍然執行 - 我已經嘗試過了,它似乎沒有輸出任何內容,但是很想知道。'拋出新的異常'需要退出()?
17
A
回答
32
不,不執行拋出異常後的代碼。
在此代碼示例我用數字標記,其將被執行的行(碼流):
try {
throw new Exception("caught for demonstration"); // 1
// code below inside the try{} block is never executed
echo "you won't read this." . PHP_EOL;
} catch (Exception $e) {
// you may want to react on the Exception here
echo "exception caught!" . PHP_EOL; // 2
}
// execution flow continues here, because Exception above has been caught
echo "yay, lets continue!" . PHP_EOL; // 3
throw new Exception("uncaught for demonstration"); // 4, end
// execution flow never reaches this point because of the Exception thrown above
// results in "Fatal Error: uncaught Exception ..."
echo "you won't see me, too" . PHP_EOL;
當一個異常被拋出後的語句,代碼將不會被執行,並且PHP將嘗試查找第一個匹配的catch塊。如果未捕獲到異常,除非已使用
set_exception_handler()
定義了處理程序,否則會發出PHP致命錯誤,並顯示「Uncaught Exception ...」消息。
3
不,不會執行throw
語句後的代碼。很像return
。
相關問題
- 1. 當類不需要拋出異常
- 2. SqlConnection.OpenAsync()退出而不拋出異常
- 3. 拋出或重新拋出異常?
- 4. 拋出一個新的異常拋出一箇舊的異常
- 5. 拋出新的異常
- 6. 魔術異常拋出拋出異常
- 7. 拋出異常拋出異常
- 8. 拋出異常不拋出
- 9. 異常不需要被拋出,但IOException異常
- 10. 更新SQL拋出異常
- 11. 重新拋出異常
- 12. 異常重新拋出
- 13. 拋出異常
- 14. 異常拋出
- 15. 拋出異常
- 16. 拋出異常
- 17. 拋出異常
- 18. 拋出異常
- 19. 拋出異常
- 20. 拋出異常
- 21. 異常拋出異常
- 22. SherlockFragmentActivity拋出所需的回調異常
- 23. 上次拋出的異常包含以前拋出的異常?
- 24. 退出時出現異常
- 25. 運營商新的與拋出異常選項仍然拋出異常
- 26. 在Java中拋出異常的方法拋出異常
- 27. LLVM異常拋出
- 28. socket.connect拋出異常
- 29. 類拋出異常
- 30. os.getcwd()拋出異常
我不知道什麼是異常的一點,如果它不會導致堆棧展開(直到適當的條件,例如'catch',阻止它展開堆棧)... – 2012-06-26 19:50:12
_When exception is拋出後,語句後面的代碼將不會執行,並且PHP將嘗試查找第一個匹配的catch塊。如果沒有捕獲到異常,除非使用set_exception_handler()._ [來自文檔](http:// php。)定義了一個處理程序,否則將發出一個PHP致命錯誤,並帶有「Uncaught Exception ...」消息。淨/手動/ EN/language.exceptions.php) –