Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung, wie PHP Ausnahmen auslöst und bestimmte Arten von Ausnahmen abfängt

Detaillierte Erklärung, wie PHP Ausnahmen auslöst und bestimmte Arten von Ausnahmen abfängt

墨辰丷
墨辰丷Original
2018-05-31 10:31:092185Durchsuche

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(&#39;address not Specified(未填写地址)!&#39;);
     } 
 
     //check the weight
     //如果重量超过5
     if($parcel->weight > 5) {
            throw new HeavyParcelException(&#39;Parcel exceeds courier limit(包裹超过运送上限)!&#39;);
     } 
 
     //otherwise we&#39;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&#39;t try to proceed any further
   exit;
 }
 echo &#39;<br/>&#39;;
 $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

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

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.


Verwandte Empfehlungen:

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!

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