一区二区久久-一区二区三区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)異常。

預定義異常 Exception

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

復制代碼 代碼如下:
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)一個自定義異常。

復制代碼 代碼如下:
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)我們的自定義信息。

復制代碼 代碼如下:
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ù)是一個拋出的異常對象。這可以用來改進上邊提到的異常記錄日志處理。

復制代碼 代碼如下:
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)異常。

復制代碼 代碼如下:
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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 婷婷激情丁香 | 国产一区二区在线免费观看 | 欧美成人一级视频 | 国产精品美女一区二区 | 色爱天堂| 精品一区二区三区18 | 91插视频 | 1区2区3区4区产品乱码入口 | 欧美日韩国产亚洲一区二区 | 91午夜影院 | 国产美女免费 | 国产网红自拍 | 久久精品观看 | 欧美激情在线视频播放 | 亚洲一区免费在线观看 | 一二三四在线视频社区1 | 亚洲一区二区三区高清 | 婷婷四房 | 二区三区在线 | 色哟哟免费在线观看 | 国产精品激情综合久久 | www欧美在线观看 | 国产亚洲综合精品一区二区三区 | 99在线国产视频 | 久久综合九九亚洲一区 | 欧美人爱视频 | 色播在线永久免费视频 | 成年午夜视频免费观看视频 | 亚洲另类图 | 婷婷丁香视频 | 午夜视频福利 | 精彩国产熟睡乱子伦午夜片 | 久久精品爱| 成人视屏在线 | 四虎欧美永久在线精品免费 | 精品视频一区二区三区在线观看 | 玖玖玖视频在线观看视频6 玖玖免费 | 7799国产精品久久久久99 | 黄色的视频免费 | 四虎在线视频免费观看 | 国产三级级在线观看大学生 |