Fragen zur PHP-Ausnahme

WBOY
Freigeben: 2016-09-08 08:43:57
Original
1330 Leute haben es durchsucht

Um PHP-Ausnahmeinformationen für die nachfolgende Verarbeitung zu sammeln, richten Sie im Allgemeinen einen Ausnahmehandler ein oder erben die Basisklasse, um eine Ausnahmeunterklasse zu schreiben. Ich verwende hier einen registrierten Ausnahmehandler. Ich bin auf mehrere Probleme gestoßen, die ich nicht ganz verstand

1: Nachdem eine Ausnahme ausgelöst wurde, wird das Programm beendet, aber ich kann mich vage erinnern, dass das Programm unter bestimmten Umständen nicht beendet wird, nachdem eine Ausnahme ausgelöst wurde. Bitte geben Sie einige Informationen an . einmal.

2: Wenn das Codesegment nach der Registrierung des Ausnahmehandlers versucht, die Ausnahme auszulösen, wird die registrierte Funktion nicht ausgeführt. Ich weiß nicht mehr genau, warum dies der Fall ist. Bitte geben Sie mir weitere Informationen.

3: Was das Design von Ausnahmen betrifft, so habe ich im Allgemeinen den Ausnahmehandler registriert und dann diese Funktion zum Organisieren und Sammeln verwendet. Diese Funktion wird nicht ausgeführt, daher weiß ich nicht, wie ich dieses Design zum Sammeln von Protokollen umsetzen soll. Bitte geben Sie mir etwas Populärwissenschaft.

Antwortinhalt:

Um PHP-Ausnahmeinformationen für die nachfolgende Verarbeitung zu sammeln, richten Sie im Allgemeinen einen Ausnahmehandler ein oder erben die Basisklasse, um eine Ausnahmeunterklasse zu schreiben. Ich verwende hier einen registrierten Ausnahmehandler. Ich bin auf mehrere Probleme gestoßen, die ich nicht ganz verstand

1: Nachdem eine Ausnahme ausgelöst wurde, wird das Programm beendet, aber ich kann mich vage erinnern, dass das Programm unter bestimmten Umständen nicht beendet wird, nachdem eine Ausnahme ausgelöst wurde. Bitte geben Sie einige Informationen an . einmal.

2: Wenn das Codesegment nach der Registrierung des Ausnahmehandlers versucht, die Ausnahme auszulösen, wird die registrierte Funktion nicht ausgeführt. Ich weiß nicht mehr genau, warum dies der Fall ist. Bitte geben Sie mir weitere Informationen.

3: Um die Erfassung einiger Protokolle zu erleichtern, habe ich im Allgemeinen den Ausnahmehandler registriert und dann diese Funktion zum Organisieren und Sammeln verwendet. Diese Funktion wird nicht ausgeführt, daher weiß ich nicht, wie ich dieses Design zum Sammeln von Protokollen umsetzen soll. Bitte geben Sie mir etwas Populärwissenschaft.

Die E-Methode von thinkphp ist eine Ausnahme, die hauptsächlich zum Auslösen von Fehlern und zum direkten Beenden verwendet wird.
Ich weiß bereits, wie man try verwendet. Ich muss nur Ausnahmen abfangen und aufschreiben, was ich nach der Ausnahme tun muss.

<code><?php
 try {
     $mgr = new CommandManager();
     $cmd = $mgr->getCommandObject("realcommand");
     $cmd->execute();
 } catch (Exception $e) {
     print $e->getMessage();
     exit();
 }
 ?></code>
Nach dem Login kopieren

1. Was ich bisher weiß ist, dass das Programm nicht beendet wird, wenn eine Ausnahme im Try Catch abgefangen wird.
2 Es gibt Anweisungen für set_Exception_handler im Handbuch
Legen Sie den Standard-Ausnahmehandler fest 🎜> wird für Ausnahmen verwendet, die nicht mit Try/Catch-Blöcken abgefangen werden. Ausnahmen werden abgebrochen, nachdem „Exception_handler“ aufgerufen wurde. 3. Da Catch die Ausnahme erfasst, kann der Ausnahmehandler die Ausnahme natürlich nicht im entsprechenden Codesegment erfassen.
Funktion _Exception_handler($Exception)

<code>{
    $_error =& load_class('Exceptions', 'core');
    $_error->log_exception('error', 'Exception: '.$exception->getMessage(), $exception->getFile(), $exception->getLine());

    // Should we display the error?
    if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors')))
    {
        $_error->show_exception($exception);
    }

    exit(1); // EXIT_ERROR
} </code>
Nach dem Login kopieren
Das Obige ist die benutzerdefinierte Ausnahmefunktion, die mit dem CI-Framework geliefert wird. Das Protokoll ist also nichts anderes als das Sammeln von getMessage sowie der Codedatei und der Zeilennummer, in der der Fehler aufgetreten ist. Beispielsweise kann CI auch den Controller und die Aktion erfassen, wenn der Code auftritt

Exception ist ein vollständigerer Fehlerbehandlungsmechanismus. Im Vergleich zu Error verfügt Exception über eine umfassendere Stapelverarbeitungsmethode.

Dies legt auch fest, dass das Programm nach der Behandlung der Ausnahme nicht zur ursprünglichen Position zurückkehrt und die Ausführung fortsetzt (dies ist bei Fehlern in Ordnung).

Warum kann die Ausführung nicht fortgesetzt werden? Dies liegt an den unterschiedlichen Behandlungsmechanismen von Ausnahmen und Fehlern:

Die Fehlerverarbeitung besteht darin, an der Stelle zu unterbrechen, an der der Fehler auftritt, zur Fehlerbehandlungsfunktion zu springen und dann dorthin zurückzukehren Interrupt nach Abschluss der Verarbeitung, damit die Ausführung fortgesetzt werden kann.
Bei der Ausnahmebehandlung wird der Stapel nach oben verschoben und das Programmsegment gefunden, das die Ausnahme abfangen kann, um die Ausnahme zu behandeln. Da der Stapel geleert wurde, ist eine Rückkehr zur ursprünglichen Ausführungsposition nicht mehr möglich.

Die Ausnahmehandlerfunktion ist eine von PHP erstellte Funktion, die mit der funktionalen Programmierung kompatibel ist. Dies entspricht jedoch tatsächlich nicht der Standardmethode zur Ausnahmebehandlung. Die Ausnahmebehandlung lässt sich am besten mit try {} Catch {} implementieren.

Was Sie gesagt haben: Wenn Sie möchten, dass die Ausnahme den inneren Catch durchbricht und vom äußeren Catch abgefangen wird, können Sie throw $e im inneren Catch verwenden.

Verwandte Etiketten:
php
Quelle:php.cn
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