Heim > Artikel > Backend-Entwicklung > Detaillierte Erklärung, wie PHP Ausnahmen auslöst und bestimmte Arten von Ausnahmen abfängt
Die Ausnahmeerfassung kann in vielen aktuellen IDE-Tools mithilfe von Tastenkombinationen einfach hinzugefügt werden, um zu verhindern, dass Benutzer Fehler sehen, die sie nicht verstehen können, oder sogar aus unerklärlichen Gründen abstürzen, was zu einer schlechten Benutzererfahrung führt. Selbst die Anzeige einer benutzerfreundlichen Absturzaufforderung ist viel besser als die direkte Anzeige von error:xxxx xxxxxxxxx. Im folgenden Artikel wird detailliert beschrieben, wie PHP Ausnahmen auslöst und bestimmte Ausnahmetypen abfängt.
Was ist eine Ausnahme?
PHP 5 bietet eine neue objektorientierte Fehlerbehandlungsmethode.
Die Ausnahmebehandlung wird verwendet, um den normalen Ablauf des Skripts zu ändern, wenn eine bestimmte Fehlersituation (Ausnahmesituation) auftritt. Diese Situation wird als Ausnahme bezeichnet.
Wenn eine Ausnahme ausgelöst wird, passiert normalerweise Folgendes:
Der aktuelle Codestatus wird gespeichert.
Code Ausführung Auf die vordefinierte Ausnahmehandlerfunktion umgestellt
Je nach Situation kann der Handler die Codeausführung vom gespeicherten Codestatus aus neu starten, die Skriptausführung beenden oder die Skriptausführung an einer anderen Stelle im Code fortsetzen
Wir zeigen verschiedene Fehlerbehandlungsmethoden:
Grundlegende Verwendung von Ausnahmen
Erstellen benutzerdefinierter Ausnahmehandler
Mehrere Ausnahmen
Ausnahmen erneut auslösen
Ausnahmehandler der obersten Ebene festlegen
php throw Das ultimative Ziel des Auslösens von Ausnahmen und Das Abfangen bestimmter Arten von Ausnahmen besteht darin, entsprechende Lösungen bereitzustellen, damit der Code weiterhin ausgeführt werden kann.
Die Testumgebung für diesen Artikel: PHP5.5.36 Safari 9.1.2
<?php header("content-type:text/html; charset=utf-8"); /** * 包裹重量异常 */ class HeavyParcelException extends Exception {} /** * 包裹类 */ class Parcel { /** * 包裹寄送目的地地址 */ public $address; /** * 包裹重量 */ public $weight; } /** * 派送员 */ class Courier { /** * 运送 */ public function ship(Parcel $parcel) { //check we have an address //如果包裹的目的地为空 if(empty($parcel->address)) { throw new Exception('address not Specified(未填写地址)!'); } //check the weight //如果重量超过5 if($parcel->weight > 5) { throw new HeavyParcelException('Parcel exceeds courier limit(包裹超过运送上限)!'); } //otherwise we're coll return true; } } $myCourier = new Courier(); $parcel = new Parcel(); //add the address if we have it 为了测试这里不填写地址 $parcel->weight = 7; try { $myCourier->ship($parcel); echo "parcel shipped"; } catch (HeavyParcelException $e) {//捕获HeavyParcelException 不写这个异常的类型名字,就跑到普通Exception抛出去了 echo "Parcel weight error(重量错误): " . $e->getMessage(); //redirect them to choose another courier } catch (Exception $e) { echo "Someting went wrong(地址错误): " . $e->getMessage(); //exit so we don't try to proceed any further exit; } echo '<br/>'; $a = 123; echo $a;
Die Codeausführungssequenz ab Zeile 54:
55 >
32 >
35 (zuerst in die Versandmethode Die Prüfung besteht darin, dass die Adresse leer ist und Exception
hier anstelle von HeavyParcelException
in Zeile 57) geworfen wird) >
60 (erfasst Exception
) >
616263 Ausgabe Adressfehler exit
; Zeilen 65 bis 67 werden nicht ausgegeben
Tipps:
Das empfinde ich am meisten Wichtig dabei ist, die Reihenfolge zu verstehen, in der der Code ausgeführt wird. Schreiben Sie ein paar Absätze, überarbeiten Sie sie dann und führen Sie sie aus.
1. Die Reihenfolge der Erfassung hängt davon ab, um welche Art von try
der Code in throw
es sich handelt, und dann von der Reihenfolge in Exception
. catch
kann nicht falsch geschrieben werden, da sonst das Schreiben von HeavyParcelException
zu Problemen führt. Sie können es selbst ausprobieren. Exception
geschrieben ist, wird der Gewichtsfehler in seinem übergeordneten Klassenobjekt in Zeile 60 erfasst. Das ist nicht das, was wir wollen. HeavyParcelException111
geschrieben ist, wird ein Adressfehler ausgegeben, aber was erfasst wird, ist das Exception
, das ursprünglich für das Gewicht verantwortlich war. Das ist auch nicht das, was wir wollen. catch
Detaillierte Erklärung, wie man die Hosts-Datei in PHP ändert
PHP-Methoden zur Implementierung der asynchronen Ausführung von Skripten
phpImplementieren Sie die Definition und Verwendung der Redis-Cache-Klasse
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie PHP Ausnahmen auslöst und bestimmte Arten von Ausnahmen abfängt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!