首頁 >後端開發 >php教程 >五分鐘帶你看懂PHP中的異常處理是什麼狀況

五分鐘帶你看懂PHP中的異常處理是什麼狀況

WBOY
WBOY原創
2021-10-20 17:26:062772瀏覽

在之前的文章中為大家帶來了《一定搞得懂PHP中如何添加圖片水印》,其中通過過示例給大家詳細介紹了在PHP中應該如何添加水印,本篇文章我們繼續來看PHP錯誤處理的相關知識,希望能幫助大家!

五分鐘帶你看懂PHP中的異常處理是什麼狀況

PHP中的錯誤和異常處理在PHP中是非常常用的,在我們的日常開發中,肯定會遇到例如忘記加分號了、函數名稱寫錯或函數被重新定義了等等很多的錯誤,如果說在開發過程中,能夠發現錯誤顯示錯誤,那肯定對我們的開發是十分有利的。

因此,在開發專案的時候合理使用一場處理,會有助於我們發現錯誤改正錯誤以加快開發速度。那接下來我們就一起來看看應該怎樣去了解我們的錯誤處理。大家也可以透過免費的《php錯誤處理》教學影片來學習。

PHP中的例外處理類

#在PHP中就提供了內建的例外處理類,也就是 Exception,這個類別包含了一些處理異常的函數,這些函數可以捕捉程式異常和錯誤。

那下面列舉出該類別中較為常用的函數:

  • #getTraceAsString():傳回已格式化成字串的、由函數getTrace() 函數所產生的信息

  • __toString():產生異常的字串訊息,它可以重載。請注意,函數最前部是兩個底線

  • getMessage():傳回異常的訊息內容

  • getLine():傳回發生錯誤的程式碼行號

  • #getCode():以數字形式傳回異常碼

  • getFile():傳回發生異常的檔案名稱

  • #getTrace():傳回backtrace() 陣列

擷取程式中的例外

#程式中的例外出現一般不會自己顯現出來,這時候我們可以透過try catch 語句和 throw 關鍵字,來達到捕捉程式中異常的目的。

try catch語句和流程控制的語句類似,throw關鍵字可以拋出一個異常,我們可以透過類似條件選擇的結構來完成捕獲程式中的例外。 try catch語句的語法格式如下:

try{
    // 可能出现异常或错误的代码,比如文件操作、数据库操作等
}catch(Exception $a){    // $a 为一个异常类的对象
    // 输出错误信息
}

在我們需要進行捕捉程式異常時,需要把需要捕捉的程式碼放入try程式碼區塊裡面,在上述語法中,每一個try應該至少有一個與之對應的catch。當try程式碼區塊沒有catch符合的異常時,程式碼就會跳到最後一個catch後面繼續進行。

在其中產生的異常都可以被throw語句跑出來並且被catch捕獲,當有一個異常出現的時候,在其後面的程式碼就不會再繼續執行了。

範例如下:

<?php
    try{
        $err = &#39;抛出异常信息,并跳出 try 语句块&#39;;
        if(is_dir(&#39;./demo&#39;)){
            echo &#39;这里是一些可能会发生异常的代码&#39;;
        }else{
            throw new Exception($err, 20211020);   // 抛出异常
        }
        echo &#39;上面抛出异常的话,这行代码将不会执行,转而执行 catch 中的代码。<br>&#39;;
    }catch(Exception $e){
        echo &#39;捕获异常:&#39;.$e->getMessage().&#39;<br>错误代码:&#39;.$e->getCode().&#39;<br>&#39;;
    }
    echo &#39;继续执行 try catch 语句之外的代码&#39;;
?>

輸出結果:

五分鐘帶你看懂PHP中的異常處理是什麼狀況

#再上述範例中,透過try語句試圖判斷目前目錄下有沒有名為demo的目錄,目錄不存在,所以執行了throw關鍵字拋出例外。異常發現拋出後,try語句的剩下語句就不會在運作了。

可以建立自己的異常類別

#PHP中可以事先定義一些異常,因為PHP很少會主動的拋出異常,當事先定義好異常後,我們可以透過if-else來對可能出現的異常進行判斷,手動來拋出異常,再PHP中經常能夠使用到我們自己創建的異常類。

範例如下:

<?php
class emailException extends Exception{
    function __toString(){
        return "<b>email is null</b>file:".$this->getFile().&#39;,line:&#39;. $this->getLine();
    }
}
class nameException extends Exception{
}
?>

在上述範例中,定義了兩個異常類,都繼承自 Exception 基類。

在實際的業務中,我們也會根據不同的需求來拋出不同的異常,示例如下:

function reg($reg) {
    if (empty($reg[&#39;email&#39;])) {
        throw new emailException("emaill is null", 1);
    }
    if(empty($reg[&#39;name&#39;])) {
        throw new nameException("name is null", 2);
     }
}

在執行業務代碼時,可以使用if語句來判斷異常會發生的地方,然後手動拋出異常,透過語句實現將不同的異常分發給不同的異常類別處理;再下面這段範例中,根據不同的情況捕獲不同的異常,當第一個catch捕獲了異常,即使程式中依然存在其他異常,也會跳過其他的catch程式碼區塊。無論程式中有沒有出現異常,最後的finally中的語句都會執行的。例如:

try{
    $reg = array(&#39;phone&#39;=>&#39;1888888888&#39;);
    reg($reg);
} catch(emailException $e) {
    echo $e;
} catch(nameException $e) {
    echo &#39;error msg:&#39; .$e->getMessage().&#39;error code:&#39;.$e->getCode();
} finally {
    echo &#39; finally&#39;;
}

想要了解更多關於PHP的知識,可以點選《PHP影片教學》學習!

以上是五分鐘帶你看懂PHP中的異常處理是什麼狀況的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn