Fehler und Ausnahmen
Unter Fehlern können Fehler im Programm selbst verstanden werden, beispielsweise Syntaxfehler. Ausnahmen treten in der Regel auf, wenn das Programm nicht wie erwartet ausgeführt wird oder nicht dem normalen Prozess der PHP-Sprache entspricht. Die zur Behandlung von Fehlern und Ausnahmen verwendeten Mechanismen sind völlig unterschiedlich, sodass es leicht zu Verwirrung kommt.
Zum Beispiel möchten wir den Fall einer Division durch 0 behandeln, indem wir die Ausnahme abfangen, aber bevor die Ausnahme abgefangen wird, löst PHP einen Fehler aus.
try { $a = 5 / 0; } catch (Exception $e) { $e->getMessage(); $a = -1; // 通过异常来处理 $a 为 0 的情况,但是实际上,捕获不到该异常 } echo $a; // PHP Warning: Division by zero
Mit anderen Worten, PHP löst den Fall einer Division durch 0 als Fehler aus und löst nicht automatisch eine Ausnahme aus, sodass sie nicht abgefangen werden kann. Ebenso kann PHP in vielen Fällen nicht automatisch Ausnahmen auslösen. Ausnahmen können nur manuell durch if-else-Anweisungen ausgelöst und mit der Methode throw kombiniert werden.
Die obige Situation tritt hauptsächlich auf, weil der Ausnahmemechanismus das Produkt der Entwicklung von PHP hin zu objektorientiert ist. Zuvor erfolgte die Fehlerberichterstattung von PHP hauptsächlich über den Fehlermechanismus. Daher sind PHP-Fehler in vielen Fällen wertvoller als Ausnahmen. PHP7 beginnt jedoch, die beiden zu vereinheitlichen, sodass Fehler wie Ausnahmen ausgelöst werden können (dieser Teil wird im Abschnitt „Ausnahmen“ erläutert).
Fehlerstufe
Fehler in PHP können als Situationen verstanden werden, die die ordnungsgemäße Ausführung des Skripts verhindern, und können von hoch nach niedrig bestimmt werden je nach Fehlerstufe:
1 – Syntax-Parsing-Fehler, wenn der Fehler ausgelöst wird, kann das Skript überhaupt nicht ausgeführt werden; . Parse error
– Schwerwiegender Fehler, ausgelöst Nach diesem Fehler können nachfolgende Skripte nicht weiter ausgeführt werden Syntax Error
– Wenn etwas Unangemessenes passiert, kann das Skript weiter ausgeführt werden; 4.Fatal Error
– Wenn etwas Unangemessenes passiert, der Grad jedoch niedriger als der Warnfehler ist, kann das Skript weiterhin ausgeführt werden.
5.Warning Error
– Dies wird nicht empfohlen und kann im folgenden aufgegeben werden Zukünftig kann das Skript weiterhin ausgeführt werden.
Standardmäßig löst PHP einen Fehler aus und zeigt die Fehlerstufe und die entsprechende Eingabeaufforderung an. Notice Error
Beispiel – Schreiben Sie kein Semikolon am Ende der Anweisung Deprecated Error
echo "abc" // PHP Parse error: syntax error, unexpected end of file, expecting ',' or ';
Beispiel – Verwenden Sie eine nicht vorhandene Funktion Parse Error
echo "before\n"; foo(); echo "after"; // 本行无法继续执行 // before // PHP Fatal error: Uncaught Error: Call to undefined function foo()
Beispiel für einen Warnfehler – Einführung einer nicht vorhandenen Datei
$a = "foo"; include('bar.php'); echo $a; // 程序继续执行 // PHP Warning: include(bar.php): failed to open stream: No such file or directory ... // foo Notice Error 示例 - 输出不存在的变量 echo $foo; echo 12345; // PHP Notice: Undefined variable: foo // 12345
Fatal Error
Beispiel – Übergabe von Zahlen anstelle von Zeichenfolgen in einigen Zeichenfolgenfunktionen strpos('12345', 3); // PHP Deprecated: strpos(): Non-string needles will be interpreted as strings in the future
, Deprecated Error
,
,
, draußen. E_ERROR
set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) : mixed
E_PARSE
E_CORE_ERROR
E_CORE_WARNING
BeispielE_COMPILE_ERROR
<?php // E_ALL - 处理全部错误类型 set_error_handler('customError', E_ALL); /** * @param int $errno 错误的级别 * @param string $errstr 错误的信息 * @param string $errfile 错误的文件名(可选) * @param string $errline 错误发生的行号(可选) */ function customError(int $errno, string $errstr, string $errfile, string $errline) { echo sprintf('错误消息为 %s', $errstr); } $a = 5 / 0; // 错误消息为 Division by zero
E_COMPILE_WARNING
Benutzer können über die Funktion trigger_error auch manuell einen Fehler auf Benutzerebene auslösen (E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, E_USER_DEPRECATED). . .
function division($a, $b) { if($b == 0){ @trigger_error("0 不能作为除数", E_USER_NOTICE); return -1; } return $a / $b; } echo division(10, 0);
Fehlerbezogene Konfigurationen
Einige häufige Konfigurationen im Zusammenhang mit der Fehlerbehandlung
● - Legen Sie die Fehlerberichtsebene fest
●- Ob Fehler angezeigt werden sollen
● error_reporting
- Ob die Anzeige während des PHP-Starts angezeigt werden soll
● display_errors
-Legen Sie fest, ob die Fehlerinformationen des ausgeführten Skripts im Serverfehlerprotokoll oder im Fehlerprotokoll aufgezeichnet werden sollen
„Modernes PHP“ schlägt vier Regeln vordisplay_startup_error
log_errors
● Fehler müssen in der Entwicklungsumgebung angezeigt werden;
● Fehler können nicht in der Produktionsumgebung angezeigt werden
● Fehler müssen sowohl in der Entwicklungsumgebung als auch in der Produktion erfasst werden Umgebung;
Empfohlene Konfiguration für Entwicklungsumgebung
display_errors = On display_startup_error = On error_reporting = -1 log_errors = On
Empfohlene Konfiguration für Produktionsumgebung
display_errors = Off display_startup_error = Off ; 报告 Notice 以外的所有错误 error_reporting = E_ALL & ~E_NOTICE log_errors = On
Symfony-Codierungsstandards verwandt
Ausnahme- und Fehlermeldungszeichenfolgen müssen mit
;throw new CommandNotFoundException(sprintf('Befehl „%s“ existiert nicht. ', $name)) ;Wenn der Fehlertyp
ist, müssen Siesprintf
@trigger_error("foo", E_USER_DEPRECATED) hinzufügen. ;Weitere PHP-Kenntnisse finden Sie im
PHP-TutorialE_USER_DEPRECATED
! @
Das obige ist der detaillierte Inhalt vonAnalyse der PHP-Fehlerbehandlung (Kernfunktion). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!