Exception具備幾個基本屬性與方法,其中包括了:php
message 異常消息內容
code 異常代碼
file 拋出異常的文件名
line 拋出異常在該文件的行數安全
其中經常使用的方法有:函數
getTrace 獲取異常追蹤信息
getTraceAsString 獲取異常追蹤信息的字符串
getMessage 獲取出錯信息調試
若是必要的話,能夠經過繼承Exception類來創建自定義的異常處理類。日誌
<?php $filename = 'test.txt'; try { if (!file_exists($filename)) { throw new Exception('文件不存在'); } } catch(Exception $e) { echo $e->getMessage(); } try{ //可能出現錯誤或異常的代碼 //catch表示捕獲,Exception是PHP已定義好的異常類 }catch(Exception $e){ //對異常的處理方法: //1.本身處理 //2.不出來,將其再次拋出 } //建立可拋出一個異常的函數 function checkNum($number){ if($number>1){ throw new Exception("異常提示-數字必須小於等於1"); } return true; } //在"try"代碼塊中觸發異常 try{ checkNum(2); //若是異常被拋出,那麼下面一行代碼將不會被輸出 echo '若是能看到這個提示,說明你的數字小於等於1'; }catch(Exception $e){ //捕獲異常 echo '捕獲異常:'.$e->getMessage(); }
上面代碼將得到相似這樣一個錯誤:code
捕獲異常:: 異常提示-數字必須小於等於1對象
例子解釋:blog
上面的代碼拋出了一個異常,並捕獲了它:繼承
建立 checkNum() 函數。它檢測數字是否大於 1。若是是,則拋出一個異常。
在 "try" 代碼塊中調用 checkNum() 函數。
checkNum() 函數中的異常被拋出
"catch" 代碼塊接收到該異常,並建立一個包含異常信息的對象 ($e)。
經過從這個 exception 對象調用 $e->getMessage(),輸出來自該異常的錯誤消息字符串
try { throw new MyException('error'); } catch(Exception $e) { echo $e->getInfo(); } //自定義的異常類,繼承了PHP的異常基類 Exception class MyException extends Exception { function getInfo(){ return '自定義錯誤信息'; } } try{ //使用異常的函數應該位於「try」 代碼塊肉。若是沒有觸發異常,則代碼將照常繼續執行。可是若是異常被觸發,會拋出一個異常。 throw new MyException('error'); //這裏規定如何觸發異常。注意:每個「throw」必須對應至少一個「catch」,固然能夠對應多個「catch」 }catch(Exception $e){ //"catch" 代碼塊會捕獲異常,並建立一個包含異常信息的對象 echo $e->getInfo();//獲取自定義的異常信息 echo $e->getInfo();//獲取繼承自基類的getMessage信息 }
咱們能夠經過try catch來捕獲異常,咱們將執行的代碼放在try代碼塊中,一旦其中的代碼拋出異常,就能在catch中捕獲。
這裏咱們只是經過案例來了解try catch的機制以及異常捕獲的方法,在實際應用中,不會輕易的拋出異常,只有在極端狀況或者很是重要的狀況下,纔會拋出異常,拋出異常,能夠保障程序的正確性與安全,避免致使不可預知的bug。
通常的異常處理流程代碼爲:
PHP異常處理之捕獲異常信息
<?php try { throw new Exception('wrong'); } catch(Exception $ex) { echo 'Error:'.$ex->getMessage().'<br>'; echo $ex->getTraceAsString().'<br>'; } echo '異常處理後,繼續執行其餘代碼';
在異常被捕獲以後,咱們能夠經過異常處理對象獲取其中的異常信息,前面咱們已經瞭解捕獲方式,以及獲取基本的錯誤信息。
在實際應用中,咱們一般會獲取足夠多的異常信息,而後寫入到錯誤日誌中。
經過咱們須要將報錯的文件名、行號、錯誤信息、異常追蹤信息等記錄到日誌中,以便調試與修復問題。
PHP異常處理之獲取錯誤發生的所在行
<?php try { throw new Exception('wrong'); } catch(Exception $ex) { $msg = 'Error:'.$ex->getMessage()."\n"; $msg.= $ex->getTraceAsString()."\n"; $msg.= '異常行號:'.$ex->getLine()."\n"; $msg.= '所在文件:'.$ex->getFile()."\n"; //將異常信息記錄到日誌中 PHP異常處理之 file_put_contents('error.log', $msg); }