Hauptmenü

Untermenü

OOP mit PHP5 - Einstiegstutorial 2 - Eine Variante

1. Die Abschnitte

2. Der feine Unterschied

...liegt in der Art und Weise, wie der Benutzer die Exceptions behandelt. Wenn er selber keine eigene Ausnahmebehandlung für sein Objekt einbaut, so wird ein Fatal error ausgegeben und die weitere Abarbeitung des Codes gestoppt. Das haben wir zum Beispiel im Abschnitt "Die Vollpfosten-Exception" gemacht.

Baut er dagegen eine eigene Ausnahmebehandlung in seinen Code, so wie im Abschnitt "Die Daten-Exception", kann er selber entscheiden, was als nächstes geschieht. Und das ist der feine Unterschied.

3. Ein Beispiel

Nehmen wir mal an, dass die Angabe eines Startverzeichnisses von irgendjemand kommen kann, also von Kreti und Pleti. Sei es über ein Formular oder was weiß ich nicht. In dem Fall möchte der Benutzer der Klasse keinen Abbruch des laufenden Scriptes, sondern nur seine eigene Meldung ausgeben. Das könnte dann so aussehen.


try
{
  $dir -> setRoot ($root);
  $dir -> denyFolder ($folder);
  $dir -> setFiletype ($filetype);
  try
  {
    $result $dir -> startSearch();
    print_r($result);
  }
  catch (daten_exception $exception)
  {
    $code  'Code: '.$exception -> getCode()."\n";
    $code .= 'Fehler: '.$exception -> getMessage()."\n";
    $code .= 'Datei: '.$exception -> getFile()."\n";
    $code .= 'Zeile: '.$exception -> getLine()."\n";
    $code .= '----------------------------------'."\n";
    file_put_contents('log.txt'$codeFILE_APPEND);
  }
}
catch (vollpfosten_exception $exception)
{
  echo 'Du hast leider, leider einen Ordner ausgewählt,
        der nicht existiert. Probier es noch einmal';
}

Erläuterung

Mit einer eigenen Ausnahmebehandlung (try ... catch) kann man auch außerhalb der Klasse den weiteren Verlauf des Programms steuern. So wird in diesem Fall kein Fatal error mit der ziemlich rabiaten Fehlermeldung ausgegeben, sondern nur ein sanfter Hinweis. Die eigentliche Mitteilung wird hierbei überschrieben.

Ach ja. Wie ihr an dem Code unschwer erkennt, kann man try-/catch-Behandlungen auch jederzeit verschachteln. Denn im inneren Block erfolgt diesmal keine Ausgabe, sondern die Fehlermeldungen werden in eine Log-Datei geschrieben.

Damit kann man auf eine sehr flexible Art und Weise Ausnahmen behandeln. Sowohl der Programmierer der Klasse als auch deren Nutzer haben darauf Einfluss.

4. Sinn und Zweck

In praktisch allen Foren bekommt man immer den Hinweis um die Ohren gehauen, dass man Fehler nicht unterdrücken darf. Und das ist auch in der Entwicklungsphase so richtig. Aber was ist mit dem Live-Betrieb?

Fehlermeldungen auf einer Seite machen sich nicht gut. Nehmen wir mal an, dass eine Datenbanktabelle aus was für Gründen auch immer zerschrotet wurde. Da ist eine Fehlermeldung à la Table 'db.tabelle' doesn't exist nicht so prickelnd. In dem Fall könnte man per catch einen Hinweis ausgeben, dass keine Daten gefunden wurden. Im Hintergrund dagegen jagen wir eine Mail raus, die uns darüber informiert. Im ersten Praxistutorial werde ich genauer darauf eingehen.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt