php如何進(jìn)行錯(cuò)誤和異常處理

小編給大家分享一下php如何進(jìn)行錯(cuò)誤和異常處理,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),西林企業(yè)網(wǎng)站建設(shè),西林品牌網(wǎng)站建設(shè),網(wǎng)站定制,西林網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,西林網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

在php中,可以利用異常處理類(lèi)“Exception”中內(nèi)置的各種成員函數(shù)來(lái)獲取并返回異常數(shù)據(jù),例如getMessage()函數(shù)就可以返回異常的消息內(nèi)容;也可以通過(guò)“try catch”語(yǔ)句和“throw”關(guān)鍵字來(lái)捕獲程序中的異常。

本教程操作環(huán)境:windows7系統(tǒng)、PHP7.1版,DELL G3電腦

PHP 中的異常處理類(lèi)

PHP 中提供了內(nèi)置的異常處理類(lèi)——Exception,該類(lèi)中常用的成員函數(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 類(lèi)的完整代碼,從這個(gè)類(lèi)的定義可以看出哪些屬性和方法(成員函數(shù))在用戶(hù)派生的子類(lèi)中是可以訪問(wèn)和繼承的。

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

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

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

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

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

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

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

<?php
    try{
        $err = '拋出異常信息,并跳出 try 語(yǔ)句塊';
        if(is_dir('./test')){
            echo '這里是一些可能會(huì)發(fā)生異常的代碼';
        }else{
            throw new Exception($err, 12345);   // 拋出異常
        }
        echo '上面拋出異常的話,這行代碼將不會(huì)執(zhí)行,轉(zhuǎn)而執(zhí)行 catch 中的代碼。<br>';
    }catch(Exception $e){
        echo '捕獲異常:'.$e->getMessage().'<br>錯(cuò)誤代碼:'.$e->getCode().'<br>';
    }
    echo '繼續(xù)執(zhí)行 try catch 語(yǔ)句之外的代碼';
?>

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

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

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

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

看完了這篇文章,相信你對(duì)“php如何進(jìn)行錯(cuò)誤和異常處理”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站題目:php如何進(jìn)行錯(cuò)誤和異常處理
網(wǎng)站路徑:http://bm7419.com/article48/jcioep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、域名注冊(cè)小程序開(kāi)發(fā)、做網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化