天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP 面向對象程序設計(oop)學習筆記 (四) - 異常處理類Exception

使用異常

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

預定義異常 Exception

Exception 類是所有異常的基類,我們可以通過派生 Exception 類來達到自定義異常的目的。下面的清單列出了 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 后,我們來嘗試擴展 exception 類來實現一個自定義異常。

復制代碼 代碼如下:
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.”。或許你想還想顯示數據庫連接失敗的原因信息。下面及通過擴展exception類來實現我們的自定義信息。

復制代碼 代碼如下:
class MyException extends Exception
{
    protected $ErrorInfo;
    //構造函里處理一些邏輯,然后將一些信息傳遞給基類
    public function __construct($message=null,$code=0)
    {
        $this->ErrorInfo = '自定義錯誤類的錯誤信息';
        parent::__construct($message,$code);
    }   
    //提供獲取自定義類信息的方法
    public function GetErrorInfo()
    {
        return $this->ErrorInfo;
    }
    /**
     *
     *這里還可以添加異常日志,只需在上面的構造函數里調用就可以了
     *
     */
    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 設置一個用戶定義的異常處理函數

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

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

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

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

總結

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

php技術PHP 面向對象程序設計(oop)學習筆記 (四) - 異常處理類Exception,轉載需保留來源!

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

主站蜘蛛池模板: 高h辣h双处全是肉一对一 | 星空无限传媒视频在线观看视频 | 亚洲AV久久无码精品蜜桃 | 公和熄洗澡三级中文字幕 | 纯肉高H啪短文合集 | 他揉捏她两乳不停呻吟口述 | 国产产一区二区三区久久毛片国语 | 色婷婷狠狠97成为人免费 | 国产精品免费一区二区三区视频 | 亚洲精品福利在线 | 国产亚洲精品看片在线观看 | 丰满人妻熟女色情A片 | 亚洲精品无码成人AAA片 | 末班车动漫无删减免费 | 99精品免费久久久久久久久蜜桃 | 天天插天天射天天干 | 国产亚洲精品久久孕妇呦呦你懂 | 最新中文字幕在线视频 | 亚洲国产精品无码中文在线 | 精品免费视在线视频观看 | 欧美 亚洲 日韩 在线综合 | 被六个男人躁到一夜同性 | 伊人网久久网 | 尤物久久99国产综合精品 | 高清 国产 在线 亚洲 | 色狗综合网 | 首页 国产 亚洲 中文字幕 | 男的插曲女的下面免费APP | 国产AV一区二区三区传媒 | 欧美性猛交AAA片免费观看 | 99热这里只有精品88 | 欧美亚洲另类图片 | 亚洲国产货青视觉盛宴 | 好吊妞在线成人免费 | 国产成人一区免费观看 | 野花高清在线观看免费3中文 | 97国产成人精品视频 | 亚洲视频免费 | 青青涩射射 | 午夜福利免费体检区 | 飘雪在线观看免费完整版 |