Heim > Backend-Entwicklung > PHP-Tutorial > PHP Master | Außergewöhnliche Ausnahmen

PHP Master | Außergewöhnliche Ausnahmen

尊渡假赌尊渡假赌尊渡假赌
Freigeben: 2025-02-25 08:30:09
Original
535 Leute haben es durchsucht

PHP Master | Exceptional Exceptions

Kernpunkte

  • PHP -Ausnahme ist eine spezielle Klasse, die geworfen und gefangen werden kann, um unerwartete Ereignisse anzuzeigen. Im Gegensatz zu nicht wiedererlebbaren Fehlern sollen Ausnahmen durch den Aufrufcode und die Ausführung der Ausführung nach oben bearbeitet werden, bis sie gefangen werden.
  • Der Unterschied zwischen PHP -Fehlern und Ausnahmen besteht darin, dass die Fehler unwiderruflich sind und in der Hauptausführungsschleife auftreten, was darauf hinweist, dass ein Problem mit der Stabilität des Codes oder der Umgebung besteht. Ausführungsschleife und bedeutet nicht, dass das System instabil ist.
  • Nicht alle nicht erfolgreichen Situationen erfordern, dass Ausnahmen geworfen werden. Ausnahmen sollten nur geworfen werden, wenn sie die Ausführung wirklich nicht fortsetzen können. Dies bedeutet, dass eine Aktion, die kein normaler Betrieb oder Standard ist, eine Abnormalität, von normalen und erwarteten Situationen abweicht.
  • über eine allgemeine Exception übereinstimmt zu sagen, dass es ein "Problem" gibt, und der Code hat keine Ahnung, was los ist. Stattdessen sollte immer eine benutzerdefinierte Ausnahme geworfen werden, um den Anrufcode über die aktuelle Situation zu informieren, wodurch eine feinkörnige Kontrolle über das geschieht, was geschieht.
  • Der globale Capture -Block ist der höchste Niveau des Capture -Blocks, und alle Ausnahmen, die auf dieses Niveau sprudeln, müssen erfasst werden. Es sollte der einzige allgemeine Ausnahmebehandler im Produktionscode sein. Andere Handler müssen spezifisch sein und auf Ausnahmen beschränkt sein, die es weiß, wie man umgeht und verantwortlich ist.

Php 5 führt einen Ausnahmebehandlungsmechanismus ein, eine spezielle Klasse, die (im Gegensatz zu geworfenen Fehlern) geworfen und gefangen werden kann, um unerwartete Ereignisse anzuzeigen. Im Gegensatz zu Fehlern sollen Ausnahmen von dem aufrufenden Code und dem Aufruf nach oben der Ausführungskette nach oben verarbeitet werden, bis sie gefangen werden. Sobald eine Ausnahme ausgeliefert ist, wird der Code im aktuellen Bereich nicht mehr ausgeführt (so wird keine Zeile nach der Ausführung der throw -Antage Ausnahmebehandler von der Sprache). Die Codeausführung wird nur dann fortgesetzt, wenn die Ausnahme gefangen wird. Dieser Artikel soll keine Ausnahmen auf der Einstiegsebene erläutern, sondern einige Ratschläge zur besseren Nutzung von Ausnahmen geben. Wenn Sie noch nie Ausnahmen verwendet haben, müssen Sie möglicherweise das PHP-Handbuch konsultieren oder das von meinen Freunden geschriebene Buch "PHP Master: Writing Speopded Code" lesen, das hervorragend erklärt

Fehler ist keine Ausnahme

Sie haben vielleicht über Ausnahmen erfahren, aber Sie wundern sich vielleicht über den Unterschied zwischen einem PHP -Fehler und einer (benutzerdefinierten) Ausnahme. Die Logik ist eigentlich sehr einfach: Der Fehler ist nicht einverwirkbar, tritt in der Hauptausführungsschleife auf und zeigt die Stabilität der Umgebung an. Wenn Sie beispielsweise versuchen, auf den skalaren Wert als Array zuzugreifen und E_NOTICE zu erhöhen, bedeutet dies ein Problem mit Ihrem Code. Es gibt keine Garantie dafür, dass die fortgesetzte Ausführung sicher ist. Diese Bedingung kann während der Ausführung nicht korrigiert werden. Wenn der T_IF durch ein unerwartetes E_PARSE vom Parser entdeckt wird, werden Sie verstehen, wie sich dies auf die Stabilität von Dingen auswirkt. Andererseits sind Ausnahmen wiederherstellbar, können (und normalerweise) außerhalb der Hauptausführungsschleife auftreten und geben die Stabilität des Systems nicht an. Es ist eine Komponente, die sagt: "Ich kann Ihre Anfrage mit der angegebenen Eingabe nicht ausfüllen, damit Sie diese Informationen nach Belieben verarbeiten können." Daher kann die angegebene Anweisung mit dem aktuellen Wert nicht fertiggestellt werden. Dies bedeutet nicht, dass Ihre Umgebung instabil ist, sondern nur, dass Ihr Code die Länge des Werts durch Polstant oder Abschneiden anpassen muss. Ihr Code kann diese Ausnahme erfassen, den Wert aktualisieren und erneut versuchen. LengthException

Nicht alle Ausnahmen sind Ausnahmen

Dies ist eine der schwierigsten Fragen zu beantworten: Was genau muss eine Ausnahme ausgelöst werden? Natürlich muss Ihre Ausnahme drei Regeln im vorherigen Absatz einhalten. Ausnahmen zu werfen, wenn es auf eine beschädigte Erinnerung stoße, ist eine sehr schlechte Praxis. Ihr Code sollte stattdessen einen Fehler werfen, damit PHP so schnell wie möglich abbrechen kann, da sich die Umgebung als unsicher erweist, um die Ausführung fortzusetzen. Selbst wenn Fehler nicht erforderlich sind, ist für alle nicht erfolgreichen Situationen keine Ausnahme erforderlich. Das heißt: Nicht alle erfolglosen Situationen sind Ausnahmen. Das Wort "abnormal" bezieht sich auf eine Aktion, die kein normaler Betrieb oder Standard ist, und auf eine Abnormalität, die von normalen und erwarteten Situationen abweicht. Ein ehemaliger Kollege sagte mir einmal beim Abendessen, dass der XML/RPC-Service, das ihr Unternehmen verwendet, das Rückgrat aller öffentlichen Operationen. Der Architekt lernte dann von Ausnahmen und ihrer Bequemlichkeit bei der Angabe von nicht erfolgreichen Zuständen. Diese Säule bietet zusätzlich zu anderen Funktionen einzelne Sign-On-Funktionen. Anstatt direkt auf die Datenbank zugreifen zu können, quer wird der XML/RPC -Dienst an, der dann basierend auf dem zentralen Datenspeicher reagiert, der alle Webanwendungen bedient. Wenn gültige Anmeldeinformationen bereitgestellt werden, wird ein erfolgreicher Status zurückgegeben. Wenn ein Problem auftritt, wird eine Ausnahme geworfen und eine Nachricht angezeigt, die den Grund für den Fehler angibt. Einfach zu erfassen, können Sie die Nachricht dem Benutzer mit einer auffälligen, glänzenden Fehlermeldung anzeigen. Aber stellt der Benutzer einen falschen Benutzernamen und/oder ein Passwort, das wirklich von den Erwartungen abweicht? In meinem Projekt sind die Benutzer, die ich bewältige, nicht perfekt, sie werden Dinge typo oder vergessen. Das Erhalten falscher Anmeldeinformationen ist sehr häufig, noch häufiger als gültige Anmeldeinformationen. Überprüfungsnachweise sind das erwartete Verhalten der Anmeldung im System. In diesem Fall sollte der XML/RPC -Dienst einen Status zurückgeben, der angibt, ob die Überprüfung erfolgreich ist oder nicht. Obwohl die Anmeldeinformationen scheitern, wird der Überprüfungsprozess selbst immer noch erfolgreich ausgeführt. Wenn der Überprüfungsprozess nicht korrekt ausgeführt wird, gibt es andere Probleme. Vielleicht ist der Datenspeicher unzugänglich oder etwas anderes. Es ist sehr ungewöhnlich, dass Anmeldesysteme keine Verbindung zu ihrem Datenspeicher herstellen können, da es nicht ohne Datenspeicher ausgeführt werden kann. Dies erfordert daher eine Ausnahme. Hinweis: Einige Personen können argumentieren, dass das Anmeldesystem keine Verbindung zum Datenspeicher herstellt, dass die Umgebung instabil ist und daher einen Fehler aufnehmen sollte. Die Anmeldung im System ist jedoch nicht für die Erhöhung eines Fehlers für die Datenspeicherung verantwortlich. Wenn der Datenspeicheranschluss/Wrapper für notwendig hält, sollte ein Fehler erhöht werden. Im Allgemeinen können Sie sich Ausnahmen als Situationen vorstellen, in denen Entwickler einsteigen, sehen und umgehen müssen. Der Code, der mit dem Ausnahme -Szenario auftritt, kann dies nicht alleine tun. Dies ist wahrscheinlich, dass der Entwickler den Code und die Art und Weise, wie er damit umgeht, geschaut hat, es zulassen, wenn es passiert. Senden Sie nicht alle Ausnahmen an das Netzwerkbetriebszentrum. Griff, was Sie können und sollten, und die Ausnahme wird nur ausgelöst, wenn sie die Ausführung wirklich nicht fortsetzen kann.

"Problem"

Vor ein paar Jahren, als ich durch Europa wanderte, bin ich auf einen unvergesslichen Anblick an einem Bahnhof in Griechenland gestoßen. Einer der Schließfachbereiche sah aus, als würde eine Bombe explodieren, mit Türen auf dem Boden verstreut, halb an Scharnieren hängen oder zerschlagen. Ich erfuhr später, dass sie den Schließfachbereich entfernt haben, aber es ist erwähnenswert, wie sie dem Kunden mitgeteilt haben, dass dieser Bereich deaktiviert wurde. Es gab viel Klebeband im mittleren Teil, wobei ein Stück Papier es mit den Worten "Problem" einfügt. Technisch ist dies völlig korrekt. Mit dem Schließfach stimmte offensichtlich etwas nicht und die Situation wurde behandelt, indem es dem Kunden mitgeteilt wurde. Sie werden es vielleicht interessant finden, aber tatsächlich sehen Sie dies oft in Ihrem Code. Wenn Sie nur Exception werfen, sagen Sie im Grunde "Problem" und der Code hat keine Ahnung, was los ist. Obwohl Exception die Basisklasse für jede Ausnahme ist, können Sie sie mit Ihrem eigenen Typ erweitern. Eine breitere Sammlung von Ausnahmen findet sich in der SPL -Bibliothek, aber dies ist weit entfernt von der Grenze. Wenn Sie sich wichtige PHP -Frameworks wie Zend Framework oder Symfony ansehen, werden Sie feststellen, dass sie für fast alle unterschiedlichen Situationen benutzerdefinierte Ausnahmen verwenden. Es ist ein wenig umständlich, all diese Dateien zu schreiben, damit sie dynamisch geladen und alle verschiedenen Typen beibehalten werden können. Dies bietet jedoch eine feinkörnige Kontrolle darüber, was für das Framework und die Verbraucher dieses Frameworks geschieht. Wenn Sie nur Exception werfen, können Sie nur sicher sein, dass etwas nicht stimmt und Sie genauso gut aufgeben können. Dies bedeutet, dass Sie Ausnahmen so verwenden, wie sie Fehler sind, die Erfassungsblöcke als stille Operatoren verwenden und nur die Hoffnung aufgeben, dass jemand diese Situation auf irgendeine Weise korrigieren kann.

Global Capture

Wenn es eine schlechte Idee ist, nicht-kundenspezifische Ausnahmen zu verwenden und alle möglichen Ausnahmen zu fangen, warum erlaubt die Sprache dann überhaupt? Es gibt eine Ausnahme von der Regel, die immer eine bestimmte Ausnahme verwendet und fängt, dh die globale Capture -Regel. Ein globaler Capture -Block ist der Aufnahmeblock auf höchster Ebene und muss alle Ausnahmen erfassen, die auf diese Ebene sprudeln. PHP selbst enthält eine (haben Sie die "tödliche Fehler: Unbefugte Ausnahme in ..." gesehen?), Aber Sie können ihn mit einem benutzerdefinierten Handler überschreiben, um als Fallback zu dienen. Sie können diesen Handler mit der Funktion set_exception_handler() festlegen, damit Sie ihn so machen können, wie Sie möchten, und Ihrem PHPMD -Regelsatz eine Regel hinzufügen, die Zeilen wie "catch (Exception $e) {" verbietet. Dies ist der einzige Grund für einen allgemeinen Ausnahmebehandler, der im Produktionscode gefunden werden sollte, der jede Instanz der Exception -Klasse erfasst, die noch nicht gefangen wurde. Andere Handler müssen spezifisch sein und auf Ausnahmen beschränkt sein, die es weiß, wie man umgeht und verantwortlich ist. Hier vorsichtig zu sein, eine handtriebbare Ausnahme einmal sprudeln zu lassen (und dann in Code zu reparieren), ist definitiv viel besser, als zu viel zu fangen und als stiller Operator zu fungieren.

Zusammenfassung

Kurz gesagt, eine Ausnahme wird nur ausgelöst, wenn Ihr Code die angeforderte Anweisung mit der angegebenen Eingabe nicht ausfüllen kann, und stellt immer eine benutzerdefinierte Ausnahme aus Fang nur Ausnahmen, die Sie verarbeiten können und sollten. Dies macht Ihre Komponenten weniger wie schwarze Kästchen (benutzerdefinierte Ausnahmen) und verringert die Möglichkeit, dass Entwickler, die Ihre Komponenten integrieren, Ihren Code ändern müssen (keine Ausnahmen fangen, die Sie nicht sollten). Wir sagen unseren Kunden/Managern immer spezifisch, aber wir sollten auch spezifisch sein!

(Bild aus Fotolien)

Häufig gestellte Fragen zum Umgang mit PHP -Ausnahme

  • Was ist der Zweck des PHP -Ausnahmehandlings?
PHP -Ausnahmehandling ist ein leistungsstarker Mechanismus, mit dem Entwickler die Fehler und Ausnahmen hyperviieren können, die während der Ausführung eines Programms auftreten können. Es bietet eine Möglichkeit, die Kontrolle von einem Teil des Programms auf einen anderen zu übertragen. Die Handhabung von PHP -Ausnahmeberätigung wird verwendet, um den normalen Codeausführung zu ändern, wenn ein angegebener Fehler auftritt. Dadurch kann der Code leichter zu lesen und zu verwalten, da der Fehlerbehandlungscode von der Hauptprogrammlogik getrennt wird.

  • Wie funktioniert der Try-Catch-Block in PHP?
In PHP wird der Try-Catch-Block verwendet, um Ausnahmen zu verarbeiten. Der Try -Block enthält Code, der möglicherweise Ausnahmen auslöst, während der Catch -Block Code enthält, der ausgeführt wird, wenn eine Ausnahme in den Try -Block geworfen wird. Wenn eine Ausnahme in den Try -Block geworfen wird, wird das Skript aufhört, das Laufen und die Steuerung wird an den ersten Catch -Block übergeben, der dem geworfenen Ausnahmetyp entspricht.

  • Welche Rolle spielt schließlich Blöcken in der PHP -Ausnahmehandhabung?
Der endgültige Block der PHP -Ausnahmebehandlung wird verwendet, um sicherzustellen, dass immer ein Code -Stück ausgeführt wird, unabhängig davon, ob eine Ausnahme ausgelöst wird oder nicht. Dies ist nützlich für Reinigungsaktivitäten wie das Schließen von Dateien oder Datenbankverbindungen, die unabhängig vom Erfolg oder Misserfolg von Operationen durchgeführt werden sollten.

  • Wie erstelle ich eine benutzerdefinierte Ausnahme in PHP?
In PHP können Sie benutzerdefinierte Ausnahmen erstellen, indem Sie die integrierte Ausnahmeklasse erweitern. Auf diese Weise können Sie Ausnahmen benutzerdefinierte Funktionen hinzufügen oder Anwendungsdomänen-spezifische Ausnahmen erstellen. Um eine benutzerdefinierte Ausnahme zu erstellen, können Sie eine neue Klasse definieren, die die Ausnahme erweitert und dann alle gewünschten benutzerdefinierten Methoden oder Eigenschaften hinzufügen.

  • Was ist der Unterschied zwischen Ausnahmen und Fehlern in PHP?
In PHP sind Fehler ein ernstes Problem, das das Ausführen von Skripten verhindert, während Ausnahmen eine Bedingung sind, die den normalen Ausführungsprozess ändert. Fehler werden normalerweise durch Syntaxfehler oder aufgerufene undefinierte Funktionen verursacht. Andererseits werden Ausnahmen häufig verwendet, um Bedingungen zu bewältigen, die für ein Programm nicht tödlich sind, sondern eine spezielle Handhabung erfordern.

  • Wie behandle ich mehrere Ausnahmen in PHP?
In PHP können Sie mehrere Fangblöcke verwenden, um mehrere Ausnahmen zu verarbeiten. Jeder Catch -Block verarbeitet Ausnahmen eines bestimmten Typs. Wenn eine Ausnahme ausgelöst wird, wird der Fangblock in der Reihenfolge überprüft, die im Code angezeigt wird. Der erste Fangblock, der mit dem geworfenen Ausnahmetyp handhabt kann, wird ausgeführt.

  • Kann ich eine Ausnahme in PHP zurückwerfen?

Ja, Sie können die Ausnahme in PHP wiederwägen. Dies ist sehr nützlich, wenn Sie irgendwie mit Ausnahmen umgehen möchten, aber ein höheres Maß an Ausnahme -Handler aufnehmen möchten. Um die Ausnahme wiederzuwischen, verwenden Sie einfach die Wurfanweisung im Fangblock.

  • Wie zeichne ich Ausnahmen in PHP auf?

In PHP können Sie Ausnahmen protokollieren, indem Sie die Funktion der Fehler_log im Catch -Block verwenden. Auf diese Weise können Sie Informationen über die Ausnahme, einschließlich ihrer Nachrichten und Stapelspuren, in die angegebene Protokolldatei protokollieren.

  • Was ist PDOException in PHP?

pdoException ist eine Ausnahme, die ausgeworfen wird, wenn ein Fehler in einer PDO -Operation auftritt. PDO (PHP -Datenobjekt) ist eine Datenbankabstraktionsschicht, die eine konsistente Schnittstelle zum Zugriff auf Datenbanken in PHP bietet. PDOException bietet Informationen zu Fehlern, einschließlich SQLState -Fehlercodes und Fehlermeldungen für den Datenbanktreiber.

  • Wie kann ich mit nicht erfassten Ausnahmen in PHP umgehen?

In PHP können Sie unbekannte Ausnahmen verarbeiten, indem Sie eine benutzerdefinierte Ausnahmebehandlerfunktion definieren und dann als Standard -Ausnahmebehandler mithilfe der Funktion set_Exception_handler einstellen. Diese Funktion wird aufgerufen, wenn eine Ausnahme, die nicht vom Try-Catch-Block erwischt wird, geworfen wird.

Das obige ist der detaillierte Inhalt vonPHP Master | Außergewöhnliche Ausnahmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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