Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erklärung zum Abfangen bestimmter Ausnahmetypen in PHP

Detaillierte Erklärung zum Abfangen bestimmter Ausnahmetypen in PHP

*文
Freigeben: 2023-03-18 22:26:01
Original
1624 Leute haben es durchsucht

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(&#39;address not Specified(未填写地址)!&#39;);
37     } 
38 
39     //check the weight
40     //如果重量超过5
41     if($parcel->weight > 5) {
42       throw new HeavyParcelException(&#39;Parcel exceeds courier limit(包裹超过运送上限)!&#39;);
43     } 
44 
45     //otherwise we&#39;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&#39;t try to proceed any further
63   exit;
64 }
65 echo &#39;<br/>&#39;;
66 $a = 123;
67 echo $a;
Nach dem Login kopieren

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

Zeile 2.57 erfasst einen bestimmten Typ.

kann nicht falsch geschrieben werden, da sonst das Schreiben von HeavyParcelException zu Problemen führt. Sie können es selbst ausprobieren. Exception

1) Wenn die Adresse beispielsweise nicht leer ist und Zeile 57 als

geschrieben ist, wird der Gewichtsfehler in seinem übergeordneten Klassenobjekt in Zeile 60 erfasst. Das ist nicht das, was wir wollen. HeavyParcelException111

2) Wenn die Adresse beispielsweise leer ist und Zeile 57 als

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage