Frage

ich aus Glatt- mysql in PHP PDO bin Vermittlungs- und ich habe bemerkt, dass der gemeinsame Weg, um Fehler zu testen, ist eine try / catch Kombination anstelle von if / else-Kombinationen.

Was ist der Vorteil dieser Methode kann ich eine try / catch-Block statt mehrere verwende verschachtelte if / else Blöcke alle Fehler für die verschiedenen Schritte zu handhaben (connect, prepare, execute, etc.)?

War es hilfreich?

Lösung

würde ich die try / catch-Block zu verwenden, wenn der normale Weg durch den Code ohne Fehler gehen sollte, es sei denn es wirklich einige außergewöhnliche Bedingungen sind - wie der Server ist unten, Ihre Anmeldeinformationen abgelaufen oder falsch ist. Ich würde es nicht unbedingt verwenden Nicht-Ausnahme Fehler zu behandeln - sagen wie der aktuelle Benutzer nicht in der richtigen Rolle zu sein. Das heißt, wenn man vernünftigerweise erwarten kann und einen Fehler behandeln, die kein Ausnahmezustand ist, ich glaube, Sie sollten Ihre Schecks tun.

Im Fall, dass Sie beschrieben haben - Einrichtung und eine Abfrage durchgeführt wird, ein try / catch-Block ist eine hervorragende Möglichkeit, es zu handhaben, wie Sie normalerweise die Abfrage erfolgreich zu sein erwarten. Auf der anderen Seite, werden Sie wahrscheinlich wollen prüfen, ob der Inhalt des Ergebnisses ist, was Sie mit dem Steuerablauflogik erwarten und nicht nur versuchen, Daten zu verwenden, die für Ihre Zwecke möglicherweise nicht gültig sein.

Eine Sache, die Sie suchen möchten ist schlampig Verwendung von try / catch. Try / catch sollte sich nicht von schlechten Programmierung zu schützen verwendet werden - die „Ich weiß nicht, was passieren wird, wenn ich dies tun, so werde ich es in einem try / catch und hoffen auf das Beste wickeln“ Art die Programmierung. Normalerweise wollen Sie die Arten von Ausnahmen beschränken Sie diejenigen zu fangen, die nicht auf den Code selbst (Server herunter, schlechte Anmeldeinformationen, etc.) verbunden sind, so dass Sie und beheben Fehler finden können, die Code sind verwandt (Null-Zeiger, usw. .).

Andere Tipps

In der Regel versuchen-Catch-Blöcke sind groß, weil sie brechen (bewegen, um die catch-Anweisung), wenn die Ausnahme auftritt. If-else-Blöcke verlassen sich auf Sie Vorhersage, wann der Fehler passieren wird.

Edit: Auch catch-Blöcke werden nicht Ihren Code von Anhalten stoppen, wenn ein Fehler getroffen wird.

Der Vorteil von try / catch und Ausnahmen in der Regel mehr für die Menschen ist Entwicklung Bibliotheken wie PDO. Sie ermöglichen ein Systementwickler undefinierte Situationen oder unerwartete Ergebnisse in einer schnellen und einfachen Art und Weise zu handhaben. Nehmen Sie eine Datenbankverbindung. Was sollte Sie ein System, wenn die Datenbank nicht erreicht werden kann. Sollte er die Ausführung stoppen? Versuch es noch einmal? Werfen Sie eine Warnung und weitermachen? Der Systementwickler kann nicht wissen, was Sie sie brauchen zu tun, sie ihnen eine Ausnahme auslösen, die Sie später werden fangen und behandeln.

Der Vorteil für Sie, als Verbraucher des Systems ist eher als eine vage Fehlercode zurück bekommen, oder eine einfache boolean falsch, dass es versäumte, eine Ausnahme Objekt erhalten, das wird

  1. Seien Sie so benannt, dass es offensichtlich ist, was schief gelaufen ist (wenn ich mich recht erinnere, nur PDO hat eine Ausnahmetyp, aber auch andere Systeme enthalten mehrere Ausnahmetypen für unterschiedliche Arten von Fehlern)

  2. Mai / sollte Methoden und Eigenschaften enthält, die Sie helfen, herauszufinden, warum die Ausnahme ausgelöst wurde

Das ist die Theorie sowieso. Es gibt viele klug Leute, die behaupten, Ausnahmen sind der Weg zu gehen. Darüber hinaus gibt es viele klug Leute, die denken, Ausnahmen der Teufel sind, und eine Krücke für faule Systementwickler. Es gibt nichts zu diesem Thema ähnlich Konsens.

Try / Catch völlig trennt die Fehlerlogik von der Objekt Geschäftslogik Handhabung.

Wurf- und eine Ausnahme zu kontrollieren ist eine teuere Operation im Vergleich mit den meisten jedem anderen primitiven Betrieb. Wenn dies ein Stück Code, das gut durchführen muss (zB in einer engen Schleife), werden Sie bei Ihrem Anwendungsfall zu finden - wenn man die Ausnahmen erwartet relativ oft geworfen werden, werden Sie mit einer besser dran, wenn / else perforance weise (es sei denn, der zugrundeliegende Code ist nur eine Ausnahme für Sie Verpackung, wobei in diesem Fall überhaupt kein Gewinn ist). Wenn die Ausnahmen in seltenen Fällen nur geworfen werden, dann sind Sie mit einem try / catch besser den Overhead der Verzweigung in einer engen Schleife zu vermeiden.

@Perchik:

Meine allgemeine Philosophie der Fehlerbehandlung:

Sie sollte verwenden, wenn / sonst alle Fälle zu behandeln, die Sie erwarten. Sie sollten nicht verwenden try {} catch {} behandeln alles (in den meisten Fällen), weil eine sinnvolle Ausnahme ausgelöst werden könnte, und Sie können über das Vorhandensein eines Fehlers lernen es. Sie sollte verwenden try {} catch {} in Situationen, in denen Sie etwas vermuten kann / wird schief gehen und Sie wollen es nicht das ganze System, wie Netzwerk-Timeout / Dateisystemzugriff Probleme zu Fall bringen, Dateien nicht vorhanden ist, etc.

Vexing Ausnahmen

Das ist genau der Vorteil, einen try / catch anstelle von mehreren if-Anweisungen. Sie können auch keine unerwarteten Fehler fangen.

Da die PDO-Objekte verwendet, sie heben Ausnahmen, wenn ein Fehler auftritt. Die alten mysql / mysqli waren nur Funktionen und nicht Ausnahmen werfen sie einfach Fehlercodes zurückgegeben. Try / catch wird verwendet, wenn kann eine Ausnahme von dem Code ausgelöst werden, und Sie es in der catch-Klausel fangen, die eine objektorientierte Art und Weise ist, um Fehler zu behandeln. Sie können keine Ausnahmen mit fangen, wenn / else Blöcke -. Sie nichts mit try / catch teilen

Alle anderen hatten gute Antworten - aber ich dachte, ich würde meine eigene in werfen:

  1. Try / Catch ist eine tatsächliche Ausnahmebehandlung - also, wenn Sie Ihre Ausnahmen ändern, wird es automatisch auf alle arbeiten try / catch-Anweisungen
  2. .
  3. Try / Catch gibt die Möglichkeit, Code selbst im Fall einer großen Ausnahme auszuführen, die möglicherweise zu töten, wenn / else und zusätzlich kann die try-Anweisung rückgängig gemacht werden (wenn Sie versierte sind).

In PHP mithilfe von Try-Catch mit inheritence, können wir Ausnahme von einer anderen Klasse werfen.

Beispiel: -. Ich bin in den controller und Benutzerdaten Validierung von Models mit

Wenn ein Fehler auslöst, muss ich nur noch Ausnahme von Model Methoden werfen.

Die Ausführung in Versuch brechen und in dem Catch-Block abgefangen wird.

So gibt es weniger Overhead von Bool vales Rückkehr und zu überprüfen.

Neben diesem Try Catch funktioniert super Bei der Verwendung von in der Kette (Try - Catch innerhalb eines anderen Try - Catch).

Komplett mit @Jared Updike zustimmen

In der Regel wird die Ausnahmebehandlung mit dem Benutzer erfolgt wenig oder gar nichts darüber zu wissen. Auf der anderen Seite weiß der Benutzer des Systems über das, was im Innern eines if-else-Block geschieht.

zB. Es sollte eine „else“ Klausel, die einen ATM-Benutzer zeigt, wird die Meldung „Nicht genügend Bankguthaben“, wenn er das Gleichgewicht niedrig ist. Und diese Nachricht nicht aus irgendeinem Grund in einem „fangen“ Block sitzt sein !!

Lassen Sie uns sagen, dass wir einen a / b Abteilung Code schreiben und die bekanntesten Ausnahmefall aufgetreten ist d 0 Divisionsfehler, was denken Sie als nächstes tun?  1. Sie können eine Mitteilung und beendet sich.  2. Sie können eine Mitteilung drucken und lassen die Benutzer die Werte neu eingeben, etc.

Es gibt Fälle, wenn verschiedene Personen / Anbieter den gleichen Ausnahmefall in unterschiedlicher Art und Weise zu handhaben wollen. Die Fang Block ließ sie dies tun, mit Leichtigkeit. Wenn Sie die Art und Weise ändern müssen, wie eine bestimmte Ausnahmefall gehandhabt wird, müssen Sie nur den catch-Block ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top