2016-08-23 3 views
2

Ich möchte eine bestimmte Ausnahme abfangen und richtig behandeln. Ich habe das vorher noch nicht gemacht und möchte es auf die beste Weise machen.Handle spezifische Ausnahmen in PHP

Wird es richtig sein, eine eigene Klasse so etwas wie

class HandleException extends Exception 
{ 
    //my code to handle exceptions; 
} 

zu erstellen und darin verschiedene Methoden, um die verschiedenen Ausnahmefällen umgehen? Soweit ich weiß, ist die Exception-Klasse wie eine "integrierte" Klasse in PHP, so dass sie erweitert werden kann und wenn eine Exception abgefangen wird, ist es nicht obligatorisch, den Fluss des Programms zu beenden.

Und eine Instanz dieser Klasse wird erstellt, wenn eine Ausnahme abgefangen wird? Etw. wie

 catch (\Exception $e) { 
     $error = new HandleException; 
    } 
+1

Nein, das ist nicht richtig. Bitte lesen Sie https://secure.php.net/manual/en/language.exceptions.php und dann (sobald Sie vollständig verstehen, wie eingebaute Ausnahmen funktionieren) https://secure.php.net/manual/en/language .exceptions.extending.php – Chris

+1

Um bestimmte Arten von Ausnahmen zu behandeln, müssen Sie Ihre eigenen Exceptions erstellen (das ist richtig), aber in Ihrer Geschäftslogik müssen Sie die von Ihnen erstellte Exception werfen und dann abfangen (wo auch immer Sie die Behandlung durchführen wollen) Logik.) Überprüfen Sie dieses Beispiel hier: https://eval.in/627662 –

Antwort

2

Sie CAN erweitern Sie das grundlegende Exception-Objekt mit Ihren eigenen, um Ihre eigenen Ausnahmetypen, z.

Wenn eine Ausnahme abgefangen wird, muss das Programm NICHT unbedingt abgebrochen werden Das wäre dem Ausnahmehandler selbst überlassen. Wenn jedoch eine Ausnahme immer wieder an den Anfang des Aufruf-Stacks springt und NICHT abgefangen wird, wird das gesamte Skript mit einem unbehandelten Ausnahmefehler abgebrochen.

2

aus dem Handbuch

Mehrere catch-Blöcke können verwendet werden, um verschiedene Klassen von Ausnahmen zu fangen. Die normale Ausführung (wenn keine Ausnahme innerhalb des try-Blocks ausgelöst wird) wird nach dem letzten in der Sequenz definierten catch-Block fortgesetzt. Ausnahmen können innerhalb eines Catch-Blocks ausgelöst (oder erneut ausgelöst) werden.

So können Sie etwas tun:

try { 
    // some code 
} catch (HandleException $e) { 
    // handle sthis error 
} catch (\Exception $e) { 
    // handle that error 
} 

Dies wird verschiedene Ausnahmen behandeln. Sie können auch das Schlüsselwort finally mit neueren PHP-Versionen verwenden.