Der normale Ablauf eines Skripts stoppt, wenn ein Fehler auftritt, und eine Ausnahme kann verwendet werden, um ihn zu ändern. Ein Benutzer kann Ausnahmen gemäß den Anforderungen der Bibliothek, des Unternehmens oder unserer Anwendung individuell definieren, indem er die bereits in der PHP-Codebasis integrierte Ausnahmeklasse erweitert. Hier sehen wir die Eigenschaften und Mitglieder, die alle innerhalb der Reichweite der untergeordneten Klasse liegen, die von der integrierten Ausnahmeklasse abruft.
WERBUNG Beliebter Kurs in dieser Kategorie PHP-ENTWICKLER - Spezialisierung | 8-Kurs-Reihe | 3 ProbetestsStarten Sie Ihren kostenlosen Softwareentwicklungskurs
Webentwicklung, Programmiersprachen, Softwaretests und andere
Im Folgenden werden die Dinge aufgeführt, die bei Auftreten einer Ausnahme auftreten:
Teilen Sie uns mit, warum wir neben den integrierten auch bestimmte Ausnahmen anpassen müssen:
Damit eine benutzerdefinierte Ausnahme ausgelöst wird, sollten wir einfach eine weitere Klasse aus der bereits integrierten Exception-Klasse erweitern.
namespace CustExcep; class CustException extends \Exception { }
Da die obige CustException-Klasse jetzt erstellt wurde, können wir wie folgt eine benutzerdefinierte Ausnahme auslösen:
throw new \CustExcep\CustException('Insert an Exception message here');
Wir können dies auch nach Bedarf anpassen, um bestimmte Klasseneigenschaften wie Datei, Code, Zeile und ihre Nachricht zu überschreiben, oder indem wir die Methode __toString() verwenden, um diese Ausnahmenachricht in das Format zu zwingen, mit dem wir arbeiten müssen.
Sehen wir uns die Funktionsweise dieser Funktion anhand einiger Beispiele an:
Code:
<?php /** * Here defining a class for custom exception */ class CustException extends Exception { // Here we are redefining the exception message so it is not optional public function __construct($exmsg, $val = 0, Exception $old = null) { // random code goes here $exmsg = 'Default'; // ensure assignment of all values correctly parent::__construct($exmsg, $val, $old); } // representing the custom string object public function __toString() { return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; } public function custFunc() { echo "Insert any custom message here\n"; } } /** * This class to test the exception */ class ExceptionTest { public $var; const NO_EXCEPTION = 0; const CUST_EXCEPTION = 1; const DEF_EXCEPTION = 2; function __construct($val = self::NO_EXCEPTION) { switch ($val) { case self::CUST_EXCEPTION: // throw custom exception throw new CustException('1 is considered as invalid', 5); break; case self::DEF_EXCEPTION: // throw default one. throw new Exception('2 is considered an invalid parameter', 6); break; default: // Will not throw any exception and creates an object here $this->var = $val; break; } } } // Example 1 try { $new = new ExceptionTest(ExceptionTest::CUST_EXCEPTION); } catch (CustException $exp) { // This exception will be caught echo "Test custom exception is caught\n", $exp; $exp->custFunc(); } catch (Exception $exp) { // This is skipped echo "Default exception is caught here\n", $exp; }
Ausgabe:
Erklärung:
Code:
<?php class custException extends Exception { public function custMsg() { //error message $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> is not a valid password. Please enter a valid one.'; return $errorMsg; } } $pwd = "Password@123"; try { //validation if(filter_var($pwd, FILTER_VALIDATE_EMAIL) === FALSE) { //exception thrown if password invalid throw new custException($pwd); } } catch (custException $error) { //show custom error echo $error->custMsg(); } ?>
Ausgabe:
Erklärung:
Im Folgenden sind die Vorteile aufgeführt:
In diesem Artikel haben wir das Konzept der benutzerdefinierten Definition und Behandlung von Ausnahmen gesehen. Es gibt auch andere Fälle, in denen dies verwendet werden kann, z. B. im Try-Catch-Block, indem mehrere Ausnahmen ausgelöst werden, bestimmte Ausnahmen erneut ausgelöst werden, ein erstklassiger Ausnahmehandler festgelegt wird usw.
Das obige ist der detaillierte Inhalt vonBenutzerdefinierte PHP-Ausnahme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!