Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Verwendung der PHP-Ausnahmebehandlungsklasse Exception

Detaillierte Erläuterung der Verwendung der PHP-Ausnahmebehandlungsklasse Exception

伊谢尔伦
伊谢尔伦Original
2017-06-30 09:37:597305Durchsuche

Ausnahmen werden häufig verwendet, um verschiedene Arten von Fehlern zu behandeln, die während der normalen Programmausführung auftreten. Wenn Sie beispielsweise eine Datenbankverknüpfung durchführen, müssen Sie mit Datenbankverbindungsfehlern rechnen. Die Verwendung von Ausnahmen kann die Fehlertoleranz unserer Programme verbessern und unsere Anwendungen stabiler und robuster machen.

Ausnahmen verwenden

PHP5 fügt ein Ausnahmebehandlungsmodul hinzu, das anderen Sprachen ähnelt. Im PHP-Code generierte Ausnahmen können von der throw-Anweisung ausgelöst und von der Catch-Anweisung abgefangen werden. Code, der eine Ausnahmebehandlung erfordert, muss in einem Try-Codeblock platziert werden, um mögliche Ausnahmen abzufangen. Jeder Versuch entspricht mindestens einem Catch-Block. Verwenden Sie mehrere Catches, um von verschiedenen Klassen generierte Ausnahmen abzufangen. Wenn der Try-Codeblock nicht mehr eine Ausnahme auslöst oder kein Catch gefunden werden kann, der mit der ausgelösten Ausnahme übereinstimmt, setzt der PHP-Code die Ausführung fort, nachdem er zum letzten Catch gesprungen ist. Natürlich erlaubt PHP, innerhalb von Catch-Blöcken erneut Ausnahmen auszulösen.

Vordefinierte AusnahmenException

Die Exception-Klasse ist die Basisklasse aller Ausnahmen. Wir können den Zweck benutzerdefinierter Ausnahmen erreichen, indem wir die Exception-Klasse ableiten. In der folgenden Liste sind grundlegende Informationen zu Exception aufgeführt.

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 )                //异常克隆
}

Nachdem wir Exception verstanden haben, versuchen wir, die Ausnahmeklasse zu erweitern, um eine benutzerdefinierte Ausnahme zu implementieren.

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();
}

Hier lösen wir eine Ausnahme vom Typ „Exception“ aus, fangen diese Ausnahme in „catch“ ab und geben schließlich „Verbindung zur Datenbank konnte nicht hergestellt“ aus. Möglicherweise möchten Sie auch Informationen darüber anzeigen, warum die Datenbankverbindung fehlgeschlagen ist. Als Nächstes implementieren wir unsere benutzerdefinierten Informationen, indem wir die Ausnahmeklasse erweitern.

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 Legt eine benutzerdefinierte Ausnahmebehandlungsfunktion fest.

Der Name der Funktion, die aufgerufen wird, wenn eine nicht abgefangene Ausnahme auftritt, als Parameter für set_Exception_handler. Diese Funktion muss vor dem Aufruf von set_Exception_handler() definiert werden. Diese Funktion akzeptiert einen Parameter, bei dem es sich um ein ausgelöstes Ausnahmeobjekt handelt. Dies kann verwendet werden, um die oben erwähnte Ausnahmeprotokollierungsbehandlung zu verbessern.

function ExceptionLogger($exception)
{
    $file='ExceptionLog.log';
    file_put_contents($fiel,$exception->toString(),FILE_APPEND);
}
set_exception_handler(ExceptionLogger);

1.3. PHP ermöglicht das erneute Auslösen von Ausnahmen innerhalb des Catch-Code-Blocks.

try
{
    #code...
}
catch(Exception $e)
{
    if($e->getCode() == 999)
    {
        #进行一些操作
    }
    else
    {
        throw $e;
    }
}

Zusammenfassung

Die Funktion von Ausnahmen ist sehr mächtig, aber wir glauben nicht, dass wir den Ausnahmemechanismus im Projekt mutwillig missbrauchen können, insbesondere den Mechanismus, der Ausnahmeprotokolle in großen Mengen verwendet Diesmal hat sich der Systemaufwand stark erhöht und die Anwendungsleistung verringert. Wir können Fehlercodes verwenden, um Fehlermeldungen einfach zu verwalten. Wenn eine Fehlermeldung mehrmals ausgegeben wird, ist die Verwendung von Fehlercodes eine wissenschaftliche Entscheidung. Wir können Fehlercodes sogar verwenden, um Fehlermeldungen in mehreren Sprachen anzuzeigen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der PHP-Ausnahmebehandlungsklasse Exception. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn