av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

PHP異常處理(Exception)

異常(Exception)處理用于在指定的錯(cuò)誤發(fā)生時(shí)改變腳本的正常流程,是在 php5 中的增加的一個(gè)重要特性。異常處理是一種可擴(kuò)展、易維護(hù)的錯(cuò)誤處理統(tǒng)一機(jī)制,并提供了一種新的面向?qū)ο蟮腻e(cuò)誤處理方式。

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)商都,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

在 Java、C# 及 Python 等語言中很早就提供了這種異常處理機(jī)制,如果你對哪一種語言中的異常處理熟悉,那對 PHP 中提供的異常處理機(jī)制也就不會(huì)陌生了。

異常處理的加入使得在 PHP 程序中排查錯(cuò)誤、捕獲異常更加簡單容易,也使得 PHP 程序在健壯性方面有很大改善和提高。異常處理在 PHP 中的具體體現(xiàn)就是,PHP 提供了一個(gè)名叫 Exception 的類完成對 PHP 程序異常的處理,這個(gè)類包含了一些處理異常的函數(shù),這些函數(shù)可以捕獲程序異常和錯(cuò)誤。

本節(jié)我們就來介紹一下 PHP 中的異常處理類及類函數(shù)的用法。

PHP 中的異常處理類

PHP 中提供了內(nèi)置的異常處理類——Exception,該類中常用的成員函數(shù)如下所示:

  • getMessage():返回異常的消息內(nèi)容;
  • getCode():以數(shù)字形式返回異常代碼;
  • getFile():返回發(fā)生異常的文件名;
  • getLine():返回發(fā)生錯(cuò)誤的代碼行號(hào);
  • getTrace():返回 backtrace() 數(shù)組;
  • getTraceAsString():返回已格式化成字符串的、由函數(shù) getTrace() 函數(shù)所產(chǎn)生的信息;
  • __toString():產(chǎn)生異常的字符串信息,它可以重載。注意,該函數(shù)最前部是兩個(gè)下劃線。

下面代碼是 Exception 類的完整代碼,從這個(gè)類的定義可以看出哪些屬性和方法(成員函數(shù))在用戶派生的子類中是可以訪問和繼承的。

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 關(guān)鍵字來實(shí)現(xiàn)。try catch 語句和流程控制語句類似,所以可以通過 try catch 語句來實(shí)現(xiàn)一種另類的條件選擇結(jié)構(gòu),而 throw 關(guān)鍵字則可以拋出一個(gè)異常。try catch 語句的語法格式如下:

try{
    // 可能出現(xiàn)異?;蝈e(cuò)誤的代碼,比如文件操作、數(shù)據(jù)庫操作等
}catch(Exception $e){    // $e 為一個(gè)異常類的對象
    // 輸出錯(cuò)誤信息
}

需要進(jìn)行異常處理的代碼都必須放入 try 代碼塊內(nèi),以便捕獲可能存在的異常。每一個(gè) try 至少要有一個(gè)與之對應(yīng)的 catch。使用多個(gè) catch 可以捕獲不同的類所產(chǎn)生的異常。

當(dāng) try 代碼塊不再拋出異常或者找不到 catch 能匹配所拋出的異常時(shí),PHP 代碼就會(huì)在跳轉(zhuǎn)到最后一個(gè) catch 的后面繼續(xù)執(zhí)行。

在 PHP 代碼中所產(chǎn)生的異??梢员?throw 語句拋出并被 catch 語句捕獲。當(dāng)然,PHP 允許在 catch 代碼塊內(nèi)再次拋出(throw)異常。

當(dāng)一個(gè)異常被拋出時(shí),其后的代碼不會(huì)再繼續(xù)執(zhí)行,而 PHP 就會(huì)嘗試?yán)^續(xù)查找第一個(gè)能與之匹配的 catch。如果一個(gè)異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應(yīng)的處理的話,將會(huì)產(chǎn)生一個(gè)嚴(yán)重的錯(cuò)誤,并且輸出 UncaughtException...(未捕獲異常)的提示信息。

【示例】使用 try catch 和 throw 捕獲程序中的異常。

';
    }catch(Exception $e){
        echo '捕獲異常:'.$e->getMessage().'
錯(cuò)誤代碼:'.$e->getCode().'
'; } echo '繼續(xù)執(zhí)行 try catch 語句之外的代碼'; ?>

運(yùn)行結(jié)果如下:

捕獲異常:拋出異常信息,并跳出 try 語句塊
錯(cuò)誤代碼:12345
繼續(xù)執(zhí)行 try catch 語句之外的代碼

示例代碼中,在 try 語句塊中試著判斷當(dāng)前目錄下是否存在名為 test 的目錄,如果不存在這個(gè)目錄,那么就會(huì)執(zhí)行第 7 行的代碼,通過關(guān)鍵字 throw 拋出異常。這個(gè)異常是一個(gè) Exception 類的對象,通過 new 關(guān)鍵字生成,并且用錯(cuò)誤信息 $err 和錯(cuò)誤代碼 12345 初始化該對象,以便后面 catch 該異常時(shí)(代碼第 11 行),可以獲取這些信息。

一旦拋出異常,那么 try 語句塊中剩下的代碼就不再繼續(xù)執(zhí)行,程序流程轉(zhuǎn)至相應(yīng)的 catch 語句塊執(zhí)行,最終通過 Exception 對象調(diào)用其成員函數(shù)輸出錯(cuò)誤信息和代碼。

PHP 創(chuàng)建自己的異常類

在各種語言里,對異常和錯(cuò)誤的定義不同。在 PHP 里遇到任何錯(cuò)誤都會(huì)拋出一個(gè)錯(cuò)誤,很少會(huì)主動(dòng)拋出異常,不像 Java 語言那樣會(huì)預(yù)先定義好各種異常類,當(dāng)程序執(zhí)行到異常處的代碼時(shí)會(huì)主動(dòng)拋出。

PHP 的異常處理機(jī)制并不完善,在 PHP 中想處理不可預(yù)料的異常是辦不到的,必須事先定義一些異常,將各種可能出現(xiàn)的異常進(jìn)行 if…else 判斷,手動(dòng)拋出異常,所以在 PHP 里經(jīng)常會(huì)使用到我們自己創(chuàng)建的異常類。

下面定義兩個(gè)異常類,都繼承自 Exception 基類。

class emailException extends Exception{
    function __toString(){
        return "email is nullfile:".$this->getFile().',line:'. $this->getLine();
    }
}
class nameException extends Exception{
}

在實(shí)際業(yè)務(wù)中可根據(jù)不同需求拋出不同異常,業(yè)務(wù)代碼如下:

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

在執(zhí)行業(yè)務(wù)代碼時(shí),需要使用 if 語句判斷異常會(huì)發(fā)生的地方,然后手動(dòng)拋出異常,將不同的異常分發(fā)給不同的異常類處理,如下所示:

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

這段程序根據(jù)不同的情況捕獲不同的異常,如果第一個(gè) catch 捕獲了異常,即使程序中仍然存在其他異常,也會(huì)跳過其他的 catch 代碼塊,但是不管程序中是否出現(xiàn)異常,最終 finally 中的語句都會(huì)執(zhí)行。

執(zhí)行以上程序的結(jié)果為:    

email is null file:/Library/WebServer/Documents/book/try.php,line:39 finally


新聞標(biāo)題:PHP異常處理(Exception)
鏈接分享:http://uogjgqi.cn/article/cooojch.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流