有時候,錯誤是不可避免的。某些完全不可預測的情況會發生。但是很多時候,我們可以提前考慮,編寫能夠攔截錯誤並在出現錯誤時執行合理操作的代碼。例如向用戶顯示有用的錯誤消息,或嘗試使用解決方法。
我們使用**例外(exceptions)**來實現這一點。
例外是用於使我們開發者意識到問題的存在。
我們將可能引發例外的代碼包裝在try
塊中,並在其後緊跟一個catch
塊。如果在try
塊中發生例外,則將執行該catch
塊:
try {
// 執行某些代碼
} catch (Throwable $e) {
// 在這裡可以處理例外情況
}
注意,我們在catch
塊中使用了一個Exception
對象$e
,我們可以檢查該對象以獲取有關例外的更多信息,例如:
try {
// 執行某些代碼
} catch (Throwable $e) {
echo $e->getMessage();
}
讓我們舉個例子。
例如,如果我錯誤地將一個數字除以零:
echo 1 / 0;
這將觸發一個致命錯誤,並且程序在該行上停止運行。
將這個操作包裝在try
塊中,並在catch
塊中打印錯誤消息,程序將順利結束並告訴我問題所在:
try {
echo 1 / 0;
} catch (Throwable $e) {
echo $e->getMessage();
}
當然,這只是一個簡單的例子,你可以看到好處:我可以攔截問題。
每個例外都有不同的類。例如,我們可以捕獲DivisionByZeroError
類型的例外,這樣我就可以對可能的問題進行過濾並進行不同的處理。
我還可以在最後添加一個catch-all
塊,捕獲所有的可投擲錯誤,例如:
try {
echo 1 / 0;
} catch (DivisionByZeroError $e) {
echo 'Ooops I divided by zero!';
} catch (Throwable $e) {
echo $e->getMessage();
}
我還可以在這個try
/catch
結構的末尾添加一個finally {}
塊,以在代碼成功執行或出現捕獲時執行一些代碼:
try {
echo 1 / 0;
} catch (DivisionByZeroError $e) {
echo 'Ooops I divided by zero!';
} catch (Throwable $e) {
echo $e->getMessage();
} finally {
echo ' ...done!';
}
你可以使用PHP提供的內置例外,但你也可以自己創建例外類。