首頁 >後端開發 >PHP問題 >php怎麼進行錯誤和異常處理

php怎麼進行錯誤和異常處理

青灯夜游
青灯夜游原創
2021-09-06 10:55:383732瀏覽

在php中,可以利用異常處理類別「Exception」中內建的各種成員函數來取得並傳回異常數據,例如getMessage()函數就可以傳回異常的訊息內容;也可以透過「try catch」語句和「throw」關鍵字來捕捉程式中的例外。

php怎麼進行錯誤和異常處理

本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦

PHP 中的例外處理類別

PHP 中提供了內建的例外處理類別-Exception,該類別中常用的成員函數如下所示:

  • getMessage():傳回例外的訊息內容;

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

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

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

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

  • getTraceAsString():傳回已格式化成字串的、由函數getTrace() 函數所產生的資訊;

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

下面程式碼是Exception 類別的完整程式碼,從這個類別的定義可以看出哪些屬性和方法(成員函數)在使用者衍生的子類別中是可以存取和繼承的。

Exception {
    /* 属性 */
    protected string $message ;
    protected int $code ;
    protected string $file ;
    protected int $line ;
    /* 方法 */
    public __construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] )
    final public getMessage ( void ) : string
    final public getPrevious ( void ) : Throwable
    final public getCode ( void ) : int
    final public getFile ( void ) : string
    final public getLine ( void ) : int
    final public getTrace ( void ) : array
    final public getTraceAsString ( void ) : string
    public __toString ( void ) : string
    final private __clone ( void ) : void
}

擷取程式中的例外

在 PHP 中想要擷取程式中的例外,需要使用 try catch 語句和 throw 關鍵字來實作。 try catch 語句和流程控制語句類似,所以可以透過 try catch 語句來實作一種另類的條件選擇結構,而 throw 關鍵字可以拋出一個例外。 try catch 語句的語法格式如下:

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

需要進行例外處理的程式碼都必須放入 try 程式碼區塊內,以便擷取可能存在的例外。每一個 try 至少要有一個對應的 catch。使用多個 catch 可以捕捉不同的類別所產生的異常。

當 try 程式碼區塊不再拋出例外或找不到 catch 能匹配所拋出的例外時,PHP 程式碼就會在跳到最後一個 catch 的後面繼續執行。

在 PHP 程式碼中所產生的例外可以被 throw 語句拋出並被 catch 語句捕捉。當然,PHP 允許在 catch 程式碼區塊內再次拋出(throw)異常。

當一個例外被拋出時,其後的程式碼不會再繼續執行,而 PHP 就會嘗試繼續找第一個能與之相符的 catch。如果一個異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,將會產生一個嚴重的錯誤,並且輸出 UncaughtException...(未捕獲異常)的提示訊息。

【範例】使用 try catch 和 throw 擷取程式中的例外狀況。

<?php
    try{
        $err = &#39;抛出异常信息,并跳出 try 语句块&#39;;
        if(is_dir(&#39;./test&#39;)){
            echo &#39;这里是一些可能会发生异常的代码&#39;;
        }else{
            throw new Exception($err, 12345);   // 抛出异常
        }
        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;;
?>

運行結果如下:

捕获异常:抛出异常信息,并跳出 try 语句块
错误代码:12345
继续执行 try catch 语句之外的代码

範例程式碼中,在try 語句區塊中試著判斷目前目錄下是否存在名為test 的目錄,如果不存在這個目錄,那麼就會執行第7 行的程式碼,透過關鍵字throw 拋出例外。這個異常是一個 Exception 類別的對象,透過 new 關鍵字生成,並且用錯誤訊息 $err 和錯誤代碼 12345 初始化該對象,以便後面 catch 該異常時(代碼第 11 行),可以獲取這些資訊。

一旦拋出異常,那麼try 語句區塊中剩餘的程式碼就不再繼續執行,程式流程轉到對應的catch 語句區塊執行,最終透過Exception 物件呼叫其成員函數輸出錯誤訊息和程式碼。

推薦學習:《

PHP影片教學

以上是php怎麼進行錯誤和異常處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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