In Bezug auf die Fehlerbehandlung in PHP - Soweit ich weiß, gibt es 3 Stile:
die()
oderexit()
Stil:$con = mysql_connect("localhost","root","password"); if (!$con) { die('Could not connect: ' . mysql_error()); }
throw Exception
Stil:if (!function_exists('curl_init')) { throw new Exception('need the CURL PHP extension. Recomplie PHP with curl'); }
trigger_error()
Stil:if(!is_array($config) && isset($config)) { trigger_error('Error: config is not an array or is not set', E_USER_ERROR); }
Jetzt werden im PHP-Handbuch alle drei Methoden verwendet.
Ich möchte wissen, welchen Stil ich bevorzugen soll und warum?
Sind diese 3 Tropfen voneinander zu ersetzen und können daher austauschbar verwendet werden?
Etwas OT: Ist es nur ich oder jeder denkt, dass PHP-Fehlerbehandlungsoptionen einfach zu viele sind, um PHP-Entwickler zu verwirren?
error-handling
php
CuriousMind
quelle
quelle
Antworten:
Der erste sollte niemals im Produktionscode verwendet werden, da er Informationen transportiert, die für Endbenutzer irrelevant sind (ein Benutzer kann nichts gegen "Keine Verbindung zur Datenbank möglich" tun ).
Sie lösen Ausnahmen aus, wenn Sie wissen, dass Ihre Anwendung an einem bestimmten kritischen Codepunkt fehlschlagen kann und Sie möchten, dass Ihr Code über mehrere Aufrufebenen hinweg wiederhergestellt wird.
trigger_error()
Mit dieser Funktion können Sie fehlerhafte Fehlerberichte erstellen (mithilfe verschiedener Ebenen von Fehlermeldungen) und diese Fehler vor Endbenutzern ausblenden (mithilfe vonset_error_handler()
), die Ihnen jedoch während des Tests angezeigt werden.Auch
trigger_error()
kann nicht-tödliche Nachrichten erzeugen wichtig bei der Entwicklung , die in der Produktion Code unterdrückt werden kann einen benutzerdefinierten Fehlerhandler verwenden. Sie können auch schwerwiegende Fehler verursachen (E_USER_ERROR
), die jedoch nicht wiederhergestellt werden können. Wenn Sie einer von denen auslösen, die Programmausführung stoppt an diesem Punkt. Aus diesem Grund sollten für schwerwiegende Fehler Ausnahmen verwendet werden. Auf diese Weise haben Sie mehr Kontrolle über den Ablauf Ihres Programms:Wenn hier
gather_data()
nur krächzend (mitE_USER_ERROR
oderdie()
) eine Chance besteht, hätten frühereINSERT
Aussagen es in Ihre Datenbank geschafft, selbst wenn dies nicht gewünscht wäre, und Sie hätten keine Kontrolle darüber, was als nächstes passieren soll.quelle
trigger_error()
& werfen Ausnahmen: Welche soll ich verwenden & wann?ROLLBACK
. Dieses Pseudocode-Beispiel deckt beide Fälle ab: Server, die nicht für die automatische Festschreibung konfiguriert sind (dieCOMMIT
Anweisung ist erforderlich), und solche, die dies tun.query('START TRANSACTION');
?Normalerweise verwende ich den ersten Weg zum einfachen Debuggen im Entwicklungscode. Es wird nicht für die Produktion empfohlen. Der beste Weg ist, eine Ausnahme auszulösen, die Sie in anderen Teilen des Programms abfangen und Fehler behandeln können.
Die drei Stile sind keine Drop-In-Ersetzungen für einander. Der erste ist überhaupt kein Fehler, sondern nur eine Möglichkeit, das Skript zu stoppen und einige Debugging-Informationen auszugeben, die Sie manuell analysieren können. Der zweite ist an sich kein Fehler, sondern wird in einen Fehler umgewandelt, wenn Sie ihn nicht abfangen. Der letzte löst einen echten Fehler in der PHP-Engine aus, der entsprechend der Konfiguration Ihrer PHP-Umgebung behandelt wird (in einigen Fällen dem Benutzer angezeigt, in anderen Fällen nur in einer Datei protokolliert oder überhaupt nicht gespeichert).
quelle
trigger_error()
gleichen passiert. Was ist der Unterschied?