Fehler und Ausnahmen in PHP systematisch verstehen

藏色散人
Freigeben: 2023-04-07 19:18:02
nach vorne
1838 Leute haben es durchsucht

Einer der Gründe, warum die PHP-Sprache einfach ist, ist der Fehlerbehandlungsmechanismus von PHP. Da die PHP-Sprache immer moderner wird, wird in diesem Blogbeitrag lediglich auf Fehler und Ausnahmen eingegangen, um das Verständnis des Systems zu erleichtern. Darüber hinaus kommt es bei jeder Sprache häufig zu Ausnahmen. Daher ist es wichtig, eine Sprache zu lernen und den Ausnahmemechanismus zu verstehen.

Was ist ein Fehler?

Wenn die PHP-Sprache auf eine abnormale Situation stößt (z. B. einen Fehler bei der Datenbankverbindung oder einen Fehler bei der Übertragung von Funktionsparametern), werden einige Fehler gemeldet. Mit Ausnahme der Fehler E_ERROR und E_CORE_ERROR werden andere Fehler nicht beendet Das Programm.

Der Grund, warum PHP den Leuten das Gefühl gibt, einfach zu sein, ist, dass das Programm nicht häufig Fehler meldet, was den Leuten die Illusion eines reibungslosen und bequemen Schreibens vermittelt.

Das ist auch der Grund PHP-Programme sind streng und genau. Die Leistung ist viel schlechter. Wenn beispielsweise die mysql_fetch_array-Abfrage auf einen Netzwerkfehler stößt und FALSE zurückgibt (das Programm wird nicht beendet), wenn das aufrufende Programm denkt, dass die Abfrage keine passenden Daten hat Das Programm ist im Wesentlichen falsch. Über PHP können wir auswählen, welche Art von Fehlern über die INI-Anweisung „error_reporting“ gemeldet werden sollen, oder die Funktion „error_reporting()“ dynamisch aufrufen . Die error_log-Anweisung kann die Fehlerausgabe im Protokoll steuern

So verwenden Sie Fehler richtig

Ob es sich um eine Systemfunktion oder eine benutzerdefinierte Funktion handelt, wenn ein Fehler vorliegt Wird intern festgestellt, wie benachrichtigen Sie den Anrufer? Dies wird normalerweise dadurch angezeigt, dass die Funktion TRUE oder FALSE zurückgibt. Diese Verarbeitungsmethode hat mehrere Nachteile:

● Der Anrufer weiß nur, dass ein Fehler aufgetreten ist, aber der Fehler Die zurückgegebenen Informationen sind zu gering und es fehlt eine Beschreibung des Fehlertyps.

● Programmverarbeitungslogik und Fehlerbehandlung. In Kombination wird der generierte Code sehr unklar sein.

Ein kleiner Tipp : Die Funktion „error_get_last()“ gibt die spezifische Ursache des letzten Fehlers zurück.

Best Practice:

● Funktion „set_error_handler()“ zum Hosten aller Fehler

● Die Funktion „trigger_error()“ kann benutzerdefinierte Fehler auslösen und kann verwendet werden, um die Return-Anweisung in der Funktion zu ersetzen.

● Alle Fehler im Protokoll ausgeben und Fehlertypen definieren.

● Fehler anzeigen Benutzer, z. B. Fehler auf benutzerfreundlichere Weise an Benutzer zurückgeben

● display_errors in der Produktionsumgebung Der Befehl sollte geschlossen werden und die Entwicklungsumgebung sollte mit diesem Befehl geöffnet werden

Das alte PHP-Framework Codeigniter kann aus der Art und Weise lernen, mit Fehlern umzugehen

function _error_handler($severity, $message, $filepath, $line)
{
    $is_error = (((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity);
    //输出500错误HTTP状态码
    if ($is_error) {
        set_status_header(500);
    }
    //对于不需要处理的错误则直接中断
    if (($severity & error_reporting()) !== $severity) {
        return;
    }
    //将所有的错误记录到日志中
    $_error =& load_class('Exceptions', 'core');
    $_error->log_exception($severity, $message, $filepath, $line);
    //友好的输出所有错误
    if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))){
        $_error->show_php_error($severity, $message, $filepath, $line);
    }
    //假如致命错误则直接退出
    if ($is_error) {
        exit(1);   
    }
}
set_error_handler('_error_handler');
Nach dem Login kopieren

Was ist eine Ausnahme

Ausnahme Es ist auch ein Fehler Es hat die folgenden Eigenschaften:

● Ausnahmen können angepasst werden, und Sie können sie auch erweitern.

● Die häufigste Aktion für Ausnahmen besteht darin, sie abzufangen. Auf diese Weise können Entwickler eine nachfolgende Verarbeitung basierend auf bestimmten Anforderungen durchführen Sie können beispielsweise benutzerfreundliche Eingabeaufforderungen an den Benutzer zurückgeben, die auf dem Kontext der Ausnahme basieren, und das Upstream-Programm damit beauftragen, sie direkt zu verarbeiten 🎜>

● Eine weitere Aktion für Ausnahmen ist das Auslösen von Geschäftslogik und unerwartete Situationen.

● Ausnahmen können vom Code ausgelöst werden Wenn das äußerste Programm sie pro Schicht nicht abgefangen hat, wird die Ausführung des Codes direkt beendet

● Wenn die Ausnahme in PHP nicht abgefangen werden kann, wird sie als schwerwiegender Fehler in das Systemfehlerprotokoll geschrieben

Erklären Sie durch intuitiven Code:

function inverse($x)
{
    if ($x < 10) {
        throw new Exception(&#39;x<10&#39;);
    } elseif ($x >= 10 and $x < 100) {
        throw new LogicException(&#39;x>=10 and x<100&#39;);
    }
    return $x;
}
try {
    echo inverse(2)."\n";
} catch (LogicException $e) {
    echo &#39;Caught LogicException: &#39;, $e->getMessage(), "\n";
} catch (Exception $e) {
    echo &#39;Caught Exception: &#39;, $e->getMessage(), "\n";
    throw $e;
}
Nach dem Login kopieren

Best Practices für Ausnahmen

● Ausnahmen können den Code klarer machen und es Entwicklern ermöglichen, sich auf das Schreiben der Geschäftslogik zu konzentrieren.

● Das Erstellen erweiterbarer Ausnahmen ist nicht sehr technisch genug?

● Das Abfangen von Ausnahmen sollte nur Ausnahmen erfassen, die von dieser Ebene behandelt werden können werden vom Upstream-Code behandelt.

Ausnahmen in PHP7

PHP7 empfiehlt die Verwendung von Ausnahmen zum Ersetzen von Fehlern, es ist jedoch unmöglich, den Fehlerbehandlungsmechanismus insgesamt aufzuheben einmal. Es muss kompatibel sein, daher kann es nur langsam umgestellt werden.

Aber Ausnahmen können durch flexible Methoden einheitlich verwendet werden

● Fehlerausnahme

in PHP definiert Eine Fehlerausnahme wurde ausgelöst.

Wenn der strikte Modus aktiviert ist, werden viele Fehler durch Fehlerausnahmen ausgelöst Wird einheitlich verwendet.

declare (strict_types = 1);
function add(int $a, int $b)
{
    return $a + $b;
}
try {
    echo add("3", "4");
}
catch (TypeError $e) { //TypeError继承自Error
    echo $e->getMessage();
}
Nach dem Login kopieren

ErrorException

ErrorException erbt von Exception.

Wir können alle Fehler über die Funktion set_error_handler() in ErrorException umwandeln So können wir uns freuen. Die einheitliche Nutzung ist ungewöhnlich.

Das obige ist der detaillierte Inhalt vonFehler und Ausnahmen in PHP systematisch verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:juejin.im
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage