一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

PHP 面向?qū)ο蟪绦蛟O(shè)計(oop)學習筆記 (四) - 異常處理類Exception

使用異常

php5 增加了類似其他語言的異常處理模塊。在php代碼中所產(chǎn)生的異常可被 throw 語句拋出并被 catch 語句捕獲。需要進行異常處理的代碼都必須放入到 try 代碼塊內(nèi),以便捕獲可能存在的異常。每個try至少對應(yīng)一個 catch 塊。使用多個 catch 可以捕獲不同的類所產(chǎn)生的異常。當 try 代碼塊不再拋出異常或者找不到 catch 能匹配所拋出的異常時,php 代碼就會在跳轉(zhuǎn)到最后一個 catch 的后面繼續(xù)執(zhí)行。當然,php 允許在 catch 代碼塊內(nèi)再次拋出(throw)異常。

預(yù)定義異常 Exception

Exception 類是所有異常的基類,我們可以通過派生 Exception 類來達到自定義異常的目的。下面的清單列出了 Exception 的基本信息。

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

了解完 Exception 后,我們來嘗試擴展 exception 類來實現(xiàn)一個自定義異常。

復(fù)制代碼 代碼如下:
function connectToDatabase()
{   
    if(!$link = mysql_connect("myhost","myuser","mypassw","mybd"))
    {
        throw new Exception("could not connect to the database.");
    }
}
try
{
    connectToDatabase();
}
catch(Exception $e)
{echo $e->getMessage();
}

這里我們拋出類一個 Exception 類型的異常,并在catch里捕獲了這個異常,最終打印出了“could not connect to the database.”。或許你想還想顯示數(shù)據(jù)庫連接失敗的原因信息。下面及通過擴展exception類來實現(xiàn)我們的自定義信息。

復(fù)制代碼 代碼如下:
class MyException extends Exception
{
    protected $ErrorInfo;
    //構(gòu)造函里處理一些邏輯,然后將一些信息傳遞給基類
    public function __construct($message=null,$code=0)
    {
        $this->ErrorInfo = '自定義錯誤類的錯誤信息';
        parent::__construct($message,$code);
    }   
    //提供獲取自定義類信息的方法
    public function GetErrorInfo()
    {
        return $this->ErrorInfo;
    }
    /**
     *
     *這里還可以添加異常日志,只需在上面的構(gòu)造函數(shù)里調(diào)用就可以了
     *
     */
    public function log($file)
    {
        file_put_contents($fiel,$this->__toString(),FILE_APPEND);
    }
}
function connectToDatabase()
{   
    throw new MyException("ErrorMessage");
}
try
{   
    connectToDatabase();
}
catch(MyException $e)
{   
    echo $e->getMessage() . "/n";
    echo $e->GetErrorInfo();
}

set_exception_handler 設(shè)置一個用戶定義的異常處理函數(shù)

當一個未捕獲的異常發(fā)生時所調(diào)用的函數(shù)名稱作為set_exception_handler的參數(shù)。該函數(shù)必須在調(diào)用set_exception_handler()之前被定義。該函數(shù)接受一個參數(shù),該參數(shù)是一個拋出的異常對象。這可以用來改進上邊提到的異常記錄日志處理。

復(fù)制代碼 代碼如下:
function ExceptionLogger($exception)
{
    $file='ExceptionLog.log';
    file_put_contents($fiel,$exception->__toString(),FILE_APPEND);
}
set_exception_handler(ExceptionLogger);

1.3、php 允許在 catch 代碼塊內(nèi)再次拋出(throw)異常。

復(fù)制代碼 代碼如下:
try
{
    #code...
}
catch(Exception $e)
{
    if($e->getCode() == 999)
    {
        #進行一些操作
    }
    else
    {
        throw $e;
    }
}

總結(jié)

異常的功能非常強大,但是不以為著我們可以在項目中肆意的濫用異常機制,特別是大量使用異常日志的機制,這回大大增加系統(tǒng)系統(tǒng)開銷降低應(yīng)用程序的性能。利用錯誤代碼我們可以方便的對錯誤信息進行管理,當一個錯誤信息被多次平拋出時,使用錯誤代碼是科學的選擇。我們甚至可以通過錯誤代碼來讓錯誤消息也支持多語言顯示。

php技術(shù)PHP 面向?qū)ο蟪绦蛟O(shè)計(oop)學習筆記 (四) - 異常處理類Exception,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: www午夜| 黄色在线视频播放 | 国产福利免费看 | 经典欧美gifxxoo动态图午夜 | 国产午夜精品久久久久九九 | 亚洲综合图片网 | 国产小视频在线看 | 亚洲性影院 | 亚洲高清一区二区三区四区 | 国产成人精品亚洲77美色 | 五月天婷婷一区二区三区久久 | 日韩色区 | 色www永久免费网站国产 | 五月婷婷基地 | 国产高清自拍 | 久久综合九色综合77 | 四虎国产精品永久一区 | 国产精品成人第一区 | 韩国一大片a毛片女同 | 亚洲国产精品久久网午夜 | 日韩中文字幕精品免费一区 | 久久精品国产亚洲网站 | 国产成人禁片免费观看视频 | 禁断の肉体乱爱中文字幕欧 | 55夜色66夜色国产精品站 | 国内不卡一二三四区 | 缴情啪啪三级小说网 | 中国第一毛片 | 国产亚洲精品日韩香蕉网 | 色视频在线观看视频 | 福利片午夜 | 99在线视频免费 | 色婷婷5月 | 久久久青草青青国产亚洲免观 | 亚洲黄色在线看 | 国产小视频在线看 | 四虎国产精品永久地址99新强 | 女人国产香蕉久久精品 | 国产成综合 | 在线观看国产区 | 欧美在线a |