成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP基礎(chǔ):異常處理Exception

laoLiueizo / 2959人閱讀

摘要:是所有異常的基類。它包含的異常的確是對(duì)象,唯一條件就是必須從類繼承。在語(yǔ)句中使用所謂的是一關(guān)系對(duì)類的名字和異常對(duì)象做檢查。如果異常在任何地方都沒(méi)能捕獲,那么會(huì)提供最后的機(jī)會(huì)異常處理函數(shù)。

Exception是所有異常的基類。

Exception {
    /* 屬性 */
    protected string $message ;
    protected int $code ;
    protected string $file ;
    protected int $line ;
    
    /* 方法 */
    public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
    final public string getMessage ( void )
    final public Exception getPrevious ( void )
    final public int getCode ( void )
    final public string getFile ( void )
    final public int getLine ( void )
    final public array getTrace ( void )
    final public string getTraceAsString ( void )
    public string __toString ( void )
    final private void __clone ( void )
}
Exception::__construct — 異常構(gòu)造函數(shù)
Exception::getMessage — 獲取異常消息內(nèi)容
Exception::getPrevious — 返回異常鏈中的前一個(gè)異常
Exception::getCode — 獲取異常代碼
Exception::getFile — 獲取發(fā)生異常的程序文件名稱
Exception::getLine — 獲取發(fā)生異常的代碼在文件中的行號(hào)
Exception::getTrace — 獲取異常追蹤信息
Exception::getTraceAsString — 獲取字符串類型的異常追蹤信息
Exception::__toString — 將異常對(duì)象轉(zhuǎn)換為字符串
Exception::__clone — 異??寺?

以上部分來(lái)自官網(wǎng):http://php.net/manual/zh/clas...

下面是參考《PHP5權(quán)威編程》
try,catch,throw
異常處理使用3中語(yǔ)言結(jié)構(gòu):try,catch,throw。為了處理一個(gè)異常,需要在try代碼塊中運(yùn)行一些代碼

try{
    $article->display();
}

try代碼只是PHP留意在代碼塊里的代碼運(yùn)行時(shí)產(chǎn)生的異常。如果出現(xiàn)了異常,它馬上被傳遞給緊跟著try代碼塊的一個(gè)或者更多的獲取代碼塊中:

catch(Exception $e){
    die($e->getMessage());
}

變量$e似乎包含了一個(gè)對(duì)象。它包含的異常的確是對(duì)象,唯一條件就是必須從Exception類繼承。
如果想在你自己的代碼中產(chǎn)生一個(gè)異常,使用throw語(yǔ)句:

$fp = @fopen($fileName,"r");
if(!is_resource($fp)){
    throw new FileException("could not open");
}

可以看出異常是個(gè)對(duì)象,throw只是簡(jiǎn)單的使用這個(gè)特定的對(duì)象作為異常的一部分
可以定義異常:

class IOException extends Exception{}
class FileException extends Exception{}

異常類中不需要成員變量或者方法:你需要的所有內(nèi)容都已經(jīng)在內(nèi)置Exception類中定義了。

PHP在catch語(yǔ)句中使用所謂的“是一”關(guān)系對(duì)類的名字和異常對(duì)象做檢查。也就是,如果該異常對(duì)象是一個(gè)catch類的實(shí)例,或者其子類的實(shí)例,PHP就執(zhí)行catch代碼
如:

try{
    $article->display();
}catch(IOException $e){
    print "IOException";
}catch(FileException $e){
    print "FileException";
}

這個(gè)例子中IOException的catch同時(shí)捕獲到IOException和FileException,因?yàn)镕ileException是從IOException繼承的

如果每一個(gè)catch都沒(méi)能捕獲到異常,那么會(huì)將該異常傳遞給調(diào)用的函數(shù),給調(diào)用的函數(shù)提供機(jī)會(huì)來(lái)捕獲。
如果異常在任何地方都沒(méi)能捕獲,那么PHP會(huì)提供最后的機(jī)會(huì):異常處理函數(shù)。默認(rèn)情況下PHP打印出錯(cuò)誤信息、類的名字和一個(gè)堆棧信息。
通過(guò)調(diào)用set_exception_handler(),可以注冊(cè)異常處理函數(shù)

function my_exception(Exception $e){
    print "error is ".$e->getMessage();
    exit;
}

set_exception_handler("my_exception");

這個(gè)函數(shù)用來(lái)處理所有沒(méi)能在catch中獲取的異常,異常處理函數(shù)中不能再拋出異常。

看看ThinkPHP中的做法:

set_exception_handler(array("Think","appException"));

static public function appException($e) {
    halt($e->__toString());
}

static public function halt($error) {
        $e = array();
        if (APP_DEBUG || IS_CLI) {
            //調(diào)試模式下輸出錯(cuò)誤信息
            if (!is_array($error)) {
                $trace          = debug_backtrace();
                $e["message"]   = $error;
                $e["file"]      = $trace[0]["file"];
                $e["line"]      = $trace[0]["line"];
                ob_start();
                debug_print_backtrace();
                $e["trace"]     = ob_get_clean();
            } else {
                $e              = $error;
            }
            if(IS_CLI){
                exit(iconv("UTF-8","gbk",$e["message"]).PHP_EOL."FILE: ".$e["file"]."(".$e["line"].")".PHP_EOL.$e["trace"]);
            }
        } else {
            //否則定向到錯(cuò)誤頁(yè)面
            $error_page         = C("ERROR_PAGE");
            if (!empty($error_page)) {
                redirect($error_page);
            } else {
                $message        = is_array($error) ? $error["message"] : $error;
                $e["message"]   = C("SHOW_ERROR_MSG")? $message : C("ERROR_MESSAGE");
            }
        }
        // 包含異常頁(yè)面模板
        $exceptionFile =  C("TMPL_EXCEPTION_FILE",null,THINK_PATH."Tpl/think_exception.tpl");
        include $exceptionFile;
        exit;
    }

在框架的入口注冊(cè)異常處理函數(shù):先引入對(duì)應(yīng)的模板文件,然后在模板文件中直接顯示出錯(cuò)誤信息

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22493.html

相關(guān)文章

  • PHP 擴(kuò)展開(kāi)發(fā)】Zephir 基礎(chǔ)

    摘要:變量作為函數(shù)返回值時(shí),必須聲明為動(dòng)態(tài)類型。動(dòng)態(tài)變量與中的變量基本完全相同支持在使用時(shí)改變類型。比較運(yùn)算符在運(yùn)算時(shí)考慮變量類型,如果是動(dòng)態(tài)變量與一致。與不一致,語(yǔ)句可以沒(méi)有,表示忽略所有異常。 上一篇 《Zephir 簡(jiǎn)介》 簡(jiǎn)單介紹了環(huán)境搭建,編寫(xiě)了一個(gè)的簡(jiǎn)單示例。這一篇繼續(xù)介紹 Zephir 基礎(chǔ)。 基本語(yǔ)法Zephir 中,每個(gè)文件都必須有且只有一個(gè)類,每個(gè)類都必須有一個(gè)命名空間,...

    wawor4827 評(píng)論0 收藏0
  • php異常處理的深入

    摘要:當(dāng)項(xiàng)目拋出異常時(shí)操作那個(gè)方法時(shí)傳的參數(shù)執(zhí)行操作異常相關(guān)操作當(dāng)前異常類通過(guò)異常類名,我們可以知道是訂單支付異常。 引出 如果你調(diào)一個(gè)類,調(diào)用時(shí)數(shù)據(jù)驗(yàn)證時(shí)報(bào)了個(gè)錯(cuò),你會(huì)以什么方式返回 數(shù)組,布爾值? 數(shù)組這個(gè)可以帶錯(cuò)誤原因回來(lái),那布爾值呢? 返回了個(gè) false, 報(bào)錯(cuò)時(shí)把錯(cuò)誤放在類變量里?還是專門(mén)用一個(gè)獲取錯(cuò)誤的方法進(jìn)行獲?。?上面說(shuō)的情況是代碼完全沒(méi)有問(wèn)題的情況。那如果是一些第三方的工...

    shadowbook 評(píng)論0 收藏0
  • thinkphp源碼分析(四)—錯(cuò)誤及異常處理

    摘要:源碼分析錯(cuò)誤及異常處理機(jī)制錯(cuò)誤及異常處理機(jī)制文件是,在框架引導(dǎo)文件的的基礎(chǔ)文件中注冊(cè)不知道的可以去看源碼分析二入口篇,通過(guò)進(jìn)行的注冊(cè)。異常中止處理將錯(cuò)誤信息托管至寫(xiě)入日志通過(guò)獲取最后拋出的錯(cuò)誤,把信息托管至,在通過(guò)異常處理函數(shù)進(jìn)行記錄信息。 源碼分析 錯(cuò)誤及異常處理機(jī)制 錯(cuò)誤及異常處理機(jī)制文件是/thinkphp/library/think/Error.php,在框架引導(dǎo)文件的的基礎(chǔ)文...

    xialong 評(píng)論0 收藏0
  • 如何優(yōu)雅的設(shè)計(jì)PHP異常

    摘要:現(xiàn)在我就用框架來(lái)進(jìn)行實(shí)戰(zhàn)下在實(shí)際業(yè)務(wù)中是如何優(yōu)雅的使用異常的場(chǎng)景描述選擇一個(gè)比較簡(jiǎn)單的業(yè)務(wù)場(chǎng)景,以登錄模塊為例,用戶在移動(dòng)端進(jìn)行登錄時(shí),需要進(jìn)行登錄,注冊(cè),忘記密碼,獲取手機(jī)驗(yàn)證碼等接口。 前言 剛開(kāi)始接觸PHP的時(shí)候沒(méi)有意識(shí)到異常的重要性,有時(shí)候出問(wèn)題很難精確的找到問(wèn)題點(diǎn),正確的處理異常也是一門(mén)學(xué)問(wèn) 異常的類別 PHP7異常做了很多變動(dòng),異常類 Exception 和錯(cuò)誤類 Erro...

    wing324 評(píng)論0 收藏0
  • 帶你拋出優(yōu)雅的處理系統(tǒng)異常

    摘要:關(guān)于拋出異常如在我的上一篇文中所說(shuō)的一樣在接口的設(shè)計(jì)中接口的返回的數(shù)據(jù)是非常重要的例如無(wú)法避免的等等這些都是要命的錯(cuò)誤同時(shí)還有一個(gè)極大的問(wèn)題就是在新增模塊中例如我最近需要新增一個(gè)的分詞查詢模塊這個(gè)在添加索引刪除索引等等操作的時(shí)候是非常容易導(dǎo) showImg(http://pqykjwm6s.bkt.clouddn.com/Grassland_Scenery_by_Shi_Yuejun....

    susheng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<