Das beste PHP Ausnahmebehandlung-Tutorial im Jahr 2024. In diesem Tutorial können Sie Was ist nicht normal,Grundlegende Verwendung Ausnahme,Versuchen Sie, werfen und zu fangen,Beispiele erläutern:,Erstellen Sie eine benutzerdefinierte Exception-Klasse,Beispiele erläutern:,Mehrere Ausnahmen,Beispiele erläutern:,Rethrows,Beispiele erläutern:,Top-Level-Exception-Handler-Set,Ausnahmeregel, lernen
Ausnahme zum Ändern der Skriptfehler tritt auf, wenn der normale Fluss angegeben.
PHP 5 bietet eine neue Methode zur Fehlerbehandlung objektorientiert.
Die Ausnahmebehandlung wird verwendet, wenn der angegebene Fehler (Ausnahme) tritt auf den normalen Ablauf des Skripts zu ändern. Diese Bedingung wird eine Ausnahme genannt.
Wenn eine Ausnahme ausgelöst wird, in der Regel kommt es:
Wir werden verschiedene Fehlerbehandlungsmethoden zeigen:
Hinweis: Ausnahmen nur im Fehlerfall verwendet werden soll, sollte es nicht in einem bestimmten Punkt verwendet werden , um eine andere Stelle im Code zu springen.
Wenn eine Ausnahme ausgelöst wird, wird der nachfolgende Code nicht fortgesetzt werden, wird PHP versuchen, die passende "fangen" Block zu finden.
Wenn eine Ausnahme nicht abgefangen wird, aber nicht mit der Verwendung von set_exception_handler () für die entsprechende Behandlung, dann ist ein schwerwiegender Fehler (Fatal Error) auftritt, und der Ausgang "abgefangene Ausnahme" (abgefangene Ausnahme) Fehlermeldungen.
Lassen Sie uns versuchen, eine Ausnahme zu werfen, aber es nicht zu fangen:
<?php // 创建一个有异常处理的函数 function checkNum($number) { if($number>1) { throw new Exception("Value must be 1 or below"); } return true; } // 触发异常 checkNum(2); ?>
Der obige Code wird einen Fehler ähnlich wie diese bekommen:
Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in /www/w3big/test/test.php:7 Stack trace: #0 /www/w3big/test/test.php(13): checkNum(2) #1 {main} thrown in /www/w3big/test/test.php on line 7
Um Fehler zu vermeiden in dem obigen Beispiel erscheinen, müssen wir den entsprechenden Code zu erstellen Ausnahmen zu behandeln.
Der richtige Umgang Ausnahmecode sollte folgendes beinhalten:
Lassen Sie eine Ausnahme auslösen:
<?php // 创建一个有异常处理的函数 function checkNum($number) { if($number>1) { throw new Exception("变量值必须小于等于 1"); } return true; } // 在 try 块 触发异常 try { checkNum(2); // 如果抛出异常,以下文本不会输出 echo '如果输出该内容,说明 $number 变量'; } // 捕获异常 catch(Exception $e) { echo 'Message: ' .$e->getMessage(); } ?>
Der obige Code wird einen Fehler wie diese:
Message: 变量值必须小于等于 1
Der obige Code löst eine Ausnahme aus und fängt ihn:
Um jedoch die "jeder Wurf einer Fangmenge entsprechen müssen" folgen Prinzip können Sie einrichten verpasste eine Top-Level-Exception-Handler auf Fehler behandeln.
eine benutzerdefinierte Exception-Handler zu erstellen ist sehr einfach. Wir erstellen Sie einfach eine Sonderklasse, wenn eine Ausnahme in PHP auftritt, können Sie seine Funktionen aufrufen. Die Klasse muss eine Verlängerung der Ausnahmeklasse sein.
Die benutzerdefinierte Exception-Klasse erbt alle Attribute in der PHP-Exception-Klasse definiert sind, können Sie benutzerdefinierte Funktionen hinzufügen möchten.
Beginnen Sie mit der Ausnahmeklassen zu erstellen:
<?php class customException extends Exception { public function errorMessage() { // 错误信息 $errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址'; return $errorMsg; } } $email = "someone@examplede.com"; try { // 检测邮箱 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { // 如果是个不合法的邮箱地址,抛出异常 throw new customException($email); } } catch (customException $e) { //display custom message echo $e->errorMessage(); } ?>
Diese neue Klasse ist eine Kopie der alten Ausnahmeklasse plus errormessage () Funktion. Da es sich um eine Kopie der alten Klasse ist, so dass es von der alten Klasse Eigenschaften und Methoden erbt, können wir die Ausnahmeklasse Methoden, wie getLine (), getFile () und getMessage () verwenden.
Der obige Code löst eine Ausnahme, und durch eine benutzerdefinierte Ausnahmeklasse, es zu erfassen:
Sie können mehrere Ausnahmen als Skript verwenden eine Vielzahl von Situationen zu erkennen.
Sie können mehrere ifdeelse Block oder einen Codeblock Switch oder Nest mehrere Ausnahmen verwenden. Diese Ausnahmen können verschiedene Ausnahmeklassen verwenden und verschiedene Fehlermeldungen zurück:
<?php class customException extends Exception { public function errorMessage() { // 错误信息 $errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址'; return $errorMsg; } } $email = "someone@example.com"; try { // 检测邮箱 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { // 如果是个不合法的邮箱地址,抛出异常 throw new customException($email); } // 检测 "example" 是否在邮箱地址中 if(strpos($email, "example") !== FALSE) { throw new Exception("$email 是 example 邮箱"); } } catch (customException $e) { echo $e->errorMessage(); } catch(Exception $e) { echo $e->getMessage(); } ?>
Der obige Code prüft zwei Bedingungen, wenn eine Bedingung nicht erfüllt, dann eine Ausnahme aus:
Wenn customException Klasse Ausnahme wird ausgelöst, aber nicht gefangen customException, erfasst nur eine Basis Ausnahme, wo die Griff Ausnahmen.
Manchmal, wenn eine Ausnahme ausgelöst wird, können Sie möchten aus dem Standard-Weg abweichen, es zu handhaben. Mai wieder in einem "fangen" Block geworfen werden.
Das Skript sollte von den Benutzersystemfehler ausgeblendet werden. Für Programmierer, Systemfehler von Bedeutung sein können, aber der Benutzer ist nicht an ihnen interessiert. Um es einfacher für die Benutzer zu verwenden, können Sie eine Ausnahme wieder mit relativ benutzerfreundlich Nachricht werfen:
<?php class customException extends Exception { public function errorMessage() { // 错误信息 $errorMsg = $this->getMessage().' 不是一个合法的 E-Mail 地址。'; return $errorMsg; } } $email = "someone@example.com"; try { try { // 检测 "example" 是否在邮箱地址中 if(strpos($email, "example") !== FALSE) { // 如果是个不合法的邮箱地址,抛出异常 throw new Exception($email); } } catch(Exception $e) { // 重新抛出异常 throw new customException($email); } } catch (customException $e) { // 显示自定义信息 echo $e->errorMessage(); } ?>
Der obige Code wird in der E-Mail-Adresse erkannt wird, wenn es die Zeichenfolge "Beispiel" enthält. Wenn es wieder, wird eine Ausnahme ausgelöst:
Wenn eine Ausnahme nicht in der aktuellen "versuchen" Block abgefangen wird, sieht es für den catch-Block auf einer höheren Ebene.
set_exception_handler () Funktion kann so eingestellt werden, um alle abgefangene Ausnahme von benutzerdefinierten Funktionen zu handhaben.
<?php function myException($exception) { echo "<b>Exception:</b> " , $exception->getMessage(); } set_exception_handler('myException'); throw new Exception('Uncaught Exception occurred'); ?>
Die Ausgabe des Codes ist oben, wie folgt:
Exception: Uncaught Exception occurred
In dem obigen Code, gibt es keine "fangen" Block, aber die Top-Level-Exception-Handler ausgelöst. Diese Funktion sollte verwendet werden, um alle abgefangene Ausnahme zu erfassen.
Kurz gesagt: Wenn Sie eine Ausnahme auslösen, müssen Sie ihn zu fangen.