4 Stimmen

Wurde trigger_error() in PHP für etwas Besseres in PHP5 veraltet?

Ich habe dies verwendet, wenn ich Fehler in PHP auslösen wollte, da ich aus einem PHP4-Hintergrund komme. Anmerkung: Ich hatte meine eigene set_error_handler() für die Behandlung dieser Fehler.

if ($error) {
    trigger_error('Sorry, error has occured');
}

Ich weiß nicht mehr, wo, aber vor einiger Zeit sagte mir jemand, ich solle "Ausnahmen verwenden". Da ich einen Großteil meines alten Codes überarbeite, dachte ich mir, dass es jetzt an der Zeit ist, einen guten Rat zu meiner Implementierung der Fehlerbehandlung einzuholen.

Jetzt, wo ich PHP5 verwende (und ein bisschen schlauer bin als ich es war, als ich den älteren Code schrieb), ist mein trigger_error() nur eine alte Vorgehensweise, und wenn ja, wie kann man Fehler in PHP5 am besten behandeln?

5voto

Andrew Hare Punkte 332190

Ja, Sie sollten sich mit dem Ausnahmemodell von PHP 5 befassen. Denken Sie aber daran, dass etwas Neues nicht zwangsläufig übernommen werden muss, nur weil es neu ist. Übernehmen Sie nur die Funktionen, die Sie brauchen und die in Ihrem Bereich sinnvoll sind.

Dennoch bin ich der Meinung, dass Ausnahmen ein gutes Konzept sind, das man verstehen sollte, und selbst wenn man sich entscheidet, sie nicht zu übernehmen, wird man um die Erfahrung reicher sein.

Ich möchte Ihnen folgende Lektüre ans Herz legen PHP: Ausnahmen - Manual :

PHP 5 hat ein ähnliches Ausnahmemodell das dem anderer Programmiersprachen Sprachen. Eine Ausnahme kann ausgelöst werden, und innerhalb von PHP abgefangen ("catched") werden. Der Code kann in einen Try-Block eingeschlossen werden, um das Abfangen von potenziellen Ausnahmen zu erleichtern. Jeder try-Block muss mindestens ein entsprechendes catch haben Block haben. Mehrere catch-Blöcke können verwendet werden verwendet werden, um verschiedene Klassen von Ausnahmen. Die normale Ausführung (wenn keine Ausnahme im Try-Block ausgelöst wird Block ausgelöst wird, oder wenn ein Catch-Block, der mit dem Klasse der ausgelösten Ausnahme nicht nicht vorhanden ist), wird nach diesem letzten Catch-Block fortgesetzt, der in der Folge definiert wurde. Ausnahmen können innerhalb eines catch-Blocks ausgelöst (oder innerhalb eines Catch-Blocks ausgelöst (oder erneut ausgelöst) werden.

Ich möchte Sie auch ermutigen, Folgendes zu lesen Was ist eine Ausnahme? (Hinweis: Dies ist ein Java-Tutorial, aber die Konzepte sind universell)

Wenn innerhalb einer Methode ein Fehler auftritt, erzeugt die Methode ein Objekt und übergibt es an das Laufzeitsystem. Das Objekt, das als Ausnahmeobjekt bezeichnet wird, enthält Informationen über den Fehler, einschließlich seines Typs und des Programmzustands, als der Fehler auftrat. Das Erstellen eines Ausnahmeobjekts und dessen Übergabe an das Laufzeitsystem wird als Auslösen einer Ausnahme bezeichnet.

Edit : Um einen globalen Exception-Handler zu implementieren (im Grunde, um einen Standard-Exception-Handler einzurichten, der zuvor unbehandelte Ausnahmen behandelt), müssen Sie die set_exception_handler Funktion.

0 Stimmen

Gibt es eine allgemeine Möglichkeit, alle Ausnahmen abzufangen, wie set_error_handler() alle Fehler behandelt? Oder bin ich noch in der alten PHP4-Mentalität? Vielen Dank für Ihre Antwort, BTW.

1 Stimmen

Ja, Sie können etwas Ähnliches tun, wie Sie es gewohnt sind (siehe meine Bearbeitung). Ich denke jedoch, dass Sie vielleicht ein wenig mehr über Ausnahmen lesen sollten, da diese viel flexibler sind, als Sie zu denken scheinen. Es ist besser, nur Ausnahmen zu behandeln, die Sie verstehen und von denen Sie sich erholen können, und dann einen Standard-Exception-Handler zu verwenden, um unbehandelte Ausnahmen zu protokollieren und dann die Anwendung zu beenden.

2voto

Jon Benedicto Punkte 10364

Die Verwendung von Ausnahmen ist der objektorientierte Weg, um Ihre eigenen Anwendungsfehler auszulösen und zu behandeln.

Das PHP-Handbuch zum Thema Ausnahmen ist wahrscheinlich ein guter Startpunkt.

Hier ist ein kleines Beispiel:

function doSomething() {
    if ($error) {
        throw new Exception('Some descriptive error message.');
    }
}

try {
    doSomething();
}
catch (Exception $e) {
    die('<p class="error">' . $e->getMessage() . '</p>');
}

0 Stimmen

Ist getMessage() eine Methode, die das Argument einer beliebigen Ausnahme liefert?

2 Stimmen

Ja, es wird die Meldung der Ausnahme erhalten: php.net/manual/de/exception.getmessage.php

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X