當異常被拋出時,其後的代碼不會繼續執行,PHP 會嘗試查找匹配的 "catch" 代碼塊。
如果異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,那麼將發生一個嚴重的錯誤(致命錯誤),並且輸出 "Uncaught Exception" (未捕獲異常)的錯誤消息。
Try, throw 和 catch(通常跑出錯誤,一般會跟try catch配合使用)
正確的處理程序應當包括:
Try - 使用異常的函數應該位於 "try" 代碼塊內。如果沒有觸發異常,則代碼將照常繼續執行。但是如果異常被觸發,會拋出一個異常。
Throw - 這裏規定如何觸發異常。每一個 "throw" 必須對應至少一個 "catch"
Catch - "catch" 代碼塊會捕獲異常,並創建一個包含異常信息的對象
讓我們觸發一個異常:
<?php
//創建可拋出一個異常的函數
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//在 "try" 代碼塊中觸發異常
try
{
checkNum(2);
//If the exception is thrown, this text will not be shown
echo 'If you see this, the number is 1 or below';
}
//捕獲異常
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>
例子解釋:
上面的代碼拋出了一個異常,並捕獲了它:
- 創建 checkNum() 函數。它檢測數字是否大於 1。如果是,則拋出一個異常。
- 在 "try" 代碼塊中調用 checkNum() 函數。
- checkNum() 函數中的異常被拋出
- "catch" 代碼塊接收到該異常,並創建一個包含異常信息的對象 ($e)。
- 通過從這個 exception 對象調用 $e->getMessage(),輸出來自該異常的錯誤消息
不過,爲了遵循“每個 throw 必須對應一個 catch”的原則,可以設置一個頂層的異常處理器來處理漏掉的錯誤。