PHP具備不少異常處理類,其中Exception是全部異常處理的基類。
Exception具備幾個基本屬性與方法,其中包括了:
message 異常消息內容
code 異常代碼
file 拋出異常的文件名
line 拋出異常在該文件的行數
其中經常使用的方法有:
getTrace 獲取異常追蹤信息
getTraceAsString 獲取異常追蹤信息的字符串
getMessage 獲取出錯信息
php
異常使用場景函數
一、主要處理各類可預見,不可預見的狀況,統一返回,沒有使用 try...catch 接收的異常直接跳進設置的方法.net
2. 但願業務代碼中不充斥一大堆打印調試的處理,就會用異常機制。或者是一些業務上須要定義一些異常。3d
若是異常出現,沒有捕獲,異常以前的代碼能夠繼續執行,以後的腳本將不能執行調試
一、不會捕獲語法錯誤code
二、try catch 只能捕獲拋出異常orm
三、父類能夠捕獲子類拋出的異常blog
實驗1、不一樣子類是否能夠互相捕獲字符串
class ExceptionA extends Exception { } class ExceptionB extends Exception { } function try_catch($type) { switch ($type) { case 1: throw new ExceptionA('a exception'); break; case 2: throw new ExceptionB('b exception'); break; } } try { try_catch(1); } catch (ExceptionB $e) { $e->getMessage(); }
執行後拋出上面錯誤,不一樣子類不能捕獲get
實驗2、父類是否能夠捕獲子類異常
<?php /** * Created by PhpStorm. * User: ganga * Date: 2019/3/9 * Time: 上午10:57 */ class ExceptionA extends Exception { } class ExceptionB extends Exception { } function try_catch($type) { switch ($type) { case 1: throw new ExceptionA('a exception'); break; case 2: throw new ExceptionB('b exception'); break; } } try { try_catch(1); } catch (Exception $e) { echo $e->getMessage(); }
結果顯示父類能夠捕獲子類
實驗3、多個try catch進行捕獲多個不一樣異常
class ExceptionA extends Exception { } class ExceptionB extends Exception { } function try_catch($type) { switch ($type) { case 1: throw new ExceptionA('a exception'); break; case 2: throw new ExceptionB('b exception'); break; } } try { try_catch(2); } catch (ExceptionA $e) { echo $e->getMessage(); } catch (ExceptionB $e) { echo $e->getMessage(); }
顯示結果
能夠利用多個try catch 進行捕獲,針對不一樣異常進行不一樣處理
實驗4、異常嵌套
class ExceptionA extends Exception { } class ExceptionB extends Exception { } function try_catch($type) { switch ($type) { case 1: throw new ExceptionA('a exception'); break; case 2: throw new ExceptionB('b exception'); break; } } try { try { try_catch(2); } catch (ExceptionA $e) { echo $e->getMessage(); } } catch (ExceptionB $e) { echo $e->getMessage(); }
實驗結果證實、
若是在內層 "try" 代碼塊中異常沒有被捕獲,則它將在外層級上查找 catch 代碼塊去捕獲。
實驗5、set_exception_handler() 能夠在定義異常處理器,處理全部未捕獲異常的用戶定義函數。
class ExceptionA extends Exception { } class ExceptionB extends Exception { } function setException($exception) { echo 'execption:' . $exception->getMessage() . ':' . $exception->getCode(); } function try_catch($type) { switch ($type) { case 1: throw new ExceptionA('a exception'); break; case 2: throw new ExceptionB('b exception'); break; } } set_exception_handler('setException'); throw new Exception('set execption');