php異常處理

Exception具備幾個基本屬性與方法,其中包括了:php

message 異常消息內容
code 異常代碼
file 拋出異常的文件名
line 拋出異常在該文件的行數安全

其中經常使用的方法有:函數

getTrace 獲取異常追蹤信息
getTraceAsString 獲取異常追蹤信息的字符串
getMessage 獲取出錯信息調試

若是必要的話,能夠經過繼承Exception類來創建自定義的異常處理類。日誌

PHP異常處理之拋出一個異常

<?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(),輸出來自該異常的錯誤消息字符串

PHP異常處理之異常處理類

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);
}

 

相關文章
相關標籤/搜索