Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse der PHP-Fehlerbehandlung (Kernfunktion)

Analyse der PHP-Fehlerbehandlung (Kernfunktion)

藏色散人
藏色散人nach vorne
2020-01-26 13:35:402104Durchsuche

Analyse der PHP-Fehlerbehandlung (Kernfunktion)

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

3.

– 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

Zusätzlich zur Standardauslösemeldung können Benutzer auch die Funktion set_error_handler verwenden, um die Fehlerbehandlung anzupassen. Die meisten Fehlertypen können angepasst werden, außer

, Deprecated Error ,

,

,

,

draußen. E_ERROR

 set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) : mixed
E_PARSE E_CORE_ERRORE_CORE_WARNINGBeispielE_COMPILE_ERROR
<?php
// E_ALL - 处理全部错误类型
set_error_handler(&#39;customError&#39;, 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(&#39;错误消息为 %s&#39;, $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

● Stellen Sie sicher, dass PHP Fehler meldet;

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 Sie

sprintf

@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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen