OOP mit PHP5 - Einstiegstutorial 2 - Eine Variante
1. Die Abschnitte
- Fehlerbehandlung
- Die Vollpfosten-Exception
- Die Daten-Exception
- Eine Variante
- Typprüfung
- Erläuterungen
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', $code, FILE_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.
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