Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung zum Abfangen bestimmter Ausnahmetypen in PHP
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. In diesem Artikel wird detailliert beschrieben, wie PHP Ausnahmen auslöst und bestimmte Ausnahmetypen abfängt. Ich hoffe, dass er für alle hilfreich ist.
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 dieses Artikels: PHP5.5.36 Safari 9.1.2
1 <?php 2 header("content-type:text/html; charset=utf-8"); 3 /** 4 * 包裹重量异常 5 */ 6 class HeavyParcelException extends Exception {} 7 8 /** 9 * 包裹类 10 */ 11 class Parcel { 12 13 /** 14 * 包裹寄送目的地地址 15 */ 16 public $address; 17 18 /** 19 * 包裹重量 20 */ 21 public $weight; 22 } 23 24 /** 25 * 派送员 26 */ 27 class Courier { 28 29 /** 30 * 运送 31 */ 32 public function ship(Parcel $parcel) { 33 //check we have an address 34 //如果包裹的目的地为空 35 if(empty($parcel->address)) { 36 throw new Exception('address not Specified(未填写地址)!'); 37 } 38 39 //check the weight 40 //如果重量超过5 41 if($parcel->weight > 5) { 42 throw new HeavyParcelException('Parcel exceeds courier limit(包裹超过运送上限)!'); 43 } 44 45 //otherwise we're coll 46 return true; 47 } 48 } 49 50 $myCourier = new Courier(); 51 $parcel = new Parcel(); 52 //add the address if we have it 为了测试这里不填写地址 53 $parcel->weight = 7; 54 try { 55 $myCourier->ship($parcel); 56 echo "parcel shipped"; 57 } catch (HeavyParcelException $e) {//捕获HeavyParcelException 不写这个异常的类型名字,就跑到普通Exception抛出去了 58 echo "Parcel weight error(重量错误): " . $e->getMessage(); 59 //redirect them to choose another courier 60 } catch (Exception $e) { 61 echo "Someting went wrong(地址错误): " . $e->getMessage(); 62 //exit so we don't try to proceed any further 63 exit; 64 } 65 echo '<br/>'; 66 $a = 123; 67 echo $a;
Die Codeausführungssequenz ab Zeile 54:
55 >
32 >
35 (Die Versandmethode überprüft zunächst, ob die Adresse leer ist, und Exception
wird stattdessen hierher geworfen Zeile 57 HeavyParcelException
) >
60 (erfasst Exception
) >
616263 Ausgabeadressenfehler exit
; Zeilen 65 bis 67 werden nicht ausgegeben
Tipps:
Ich denke, dass das Wichtigste in diesem Bereich darin besteht, die Reihenfolge der Codeausführung herauszufinden. Schreiben Sie ein paar Absätze, überarbeiten Sie sie 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
Verwandte Empfehlungen:
Anpassung des PHP-Ausnahmehandlers
Wie PHP die Bilderkennung implementiert
Wie PHP Prozesssperre und Multiprozess implementiert
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung zum Abfangen bestimmter Ausnahmetypen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!