首頁 後端開發 php教程 PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception_PHP教程

PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception_PHP教程

Jul 13, 2016 am 10:28 AM
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;
    }
}

总结

异常的功能非常强大,但是不以为着我们可以在项目中肆意的滥用异常机制,特别是大量使用异常日志的机制,这回大大增加系统系统开销降低应用程序的性能。利用错误代码我们可以方便的对错误信息进行管理,当一个错误信息被多次平抛出时,使用错误代码是科学的选择。我们甚至可以通过错误代码来让错误消息也支持多语言显示。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/788632.htmlTechArticle使用异常 PHP5 增加了类似其他语言的异常处理模块。在PHP代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获。需要进行异常处理的...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java中的ConcurrentModificationException異常的產生原因和解決方法 Java中的ConcurrentModificationException異常的產生原因和解決方法 Jun 25, 2023 am 10:33 AM

在Java中,當多個執行緒同時操作一個集合物件時,有可能會發生ConcurrentModificationException異常,該異常通常發生在遍歷集合時進行修改或刪除元素的操作,這會導致集合的狀態出現不一致,從而拋出異常。本文將深入探討此異常的產生原因和解決方法。一、異常產生原因通常情況下,ConcurrentModificationException異

PHP Fatal error: Uncaught exception 'PDOException'的解決方法 PHP Fatal error: Uncaught exception 'PDOException'的解決方法 Jun 23, 2023 pm 12:09 PM

在PHP開發中,可能會遇到「PHPFatalerror:Uncaughtexception‘PDOException’」這樣的錯誤,這是由於PHP操作資料庫的時候出現了錯誤所引發的異常。如果不及時處理這個錯誤,就會導致程式中斷或出現無法預期的錯誤。那麼如何解決這個問題呢?以下是一些常見的解決方法。一、檢查資料庫參數首先,我們需要檢查連接資料庫時傳

Java中的UnsupportedEncodingException異常該如何處理? Java中的UnsupportedEncodingException異常該如何處理? Jun 25, 2023 am 08:02 AM

Java中的UnsupportedEncodingException異常該如何處理?在Java程式設計中,可能會遇到UnsupportedEncodingException異常。這個異常通常是由於編碼轉換不正確或編碼不支援所造成的。在這篇文章中,我們將介紹UnsupportedEncodingException異常的原因和如何處理它。什麼是UnsupportedE

Java中的ConcurrentModificationException異常常見原因是什麼? Java中的ConcurrentModificationException異常常見原因是什麼? Jun 25, 2023 am 11:07 AM

Java中的ConcurrentModificationException異常常見原因是什麼?當在使用Java集合框架中迭代器遍歷集合的時候,有時候會拋出ConcurrentModificationException異常,這是常見的Java異常之一。那麼,這個異常的產生是什麼原因呢?首先,我們需要了解Java集合框架所提供的迭代器是有狀態的。也就是說,在遍歷時

Java中的ArrayStoreException異常的解決方法 Java中的ArrayStoreException異常的解決方法 Jun 25, 2023 am 08:05 AM

在Java的開發中,我們經常使用陣列來儲存一系列的數據,因為陣列的便利性和效能優勢。但是,在使用陣列的過程中,會出現一些異常情況,其中一個常見的異常就是ArrayStoreException。當我們向數組中儲存不相容的資料類型時,就會拋出這個異常。這篇文章將介紹什麼是ArrayStoreException異常、它的產生原因,以及如何解決這個例外。一、Arr

Java中的ArrayStoreException異常的常見原因是什麼? Java中的ArrayStoreException異常的常見原因是什麼? Jun 25, 2023 am 09:48 AM

在Java程式設計中,陣列是一種重要的資料結構。數組可以在一個變數中儲存多個值,更重要的是可以使用索引存取每個值。但是在使用陣列時,可能會出現一些異常,其中之一是ArrayStoreException。本文將討論ArrayStoreException異常的常見原因。 1.類型不符合數組在建立時必須指定元素類型。當我們試圖將不相容的資料類型儲存到數組時,就會拋

在Java中,Exception類別和Error類別之間有什麼區別? 在Java中,Exception類別和Error類別之間有什麼區別? Sep 09, 2023 pm 12:05 PM

Exception類別和Error類別都是java.lang.Throwable類別的子類,我們可以處理執行時的異常,但不能處理錯誤。異常是代表運行時發生的邏輯錯誤的對象,使JVM進入「歧義」狀態。 JVM自動建立的用於代表這些執行時間錯誤的物件稱為異常。 Error是Throwable類的子類,它指示合理的應用程式不應嘗試捕獲的嚴重問題。大多數此類錯誤都是異常情況。如果發生異常,我們可以使用try和catch區塊來處理它。如果發生錯誤我們無法處理,程式就會終止。例外有兩種類型,一種是CheckedExce

Java中的UnsupportedEncodingException異常的解決方法 Java中的UnsupportedEncodingException異常的解決方法 Jun 25, 2023 am 08:48 AM

Java中可能會出現UnsupportedEncodingException異常,主要是因為編碼不被支援導致。在處理文字資料時,經常需要進行編碼轉換,也就是把一種編碼格式的內容轉換成另一種編碼格式的內容。而如果進行編碼轉換時所使用的編碼類型不被支持,就會拋出UnsupportedEncodingException異常。本文將介紹該異常的解決方法。一、

See all articles