OOP mit PHP5 - Einstiegstutorial 2 - Die Vollpfosten-Exception
1. Die Abschnitte
- Fehlerbehandlung
- Die Vollpfosten-Exception
- Die Daten-Exception
- Eine Variante
- Typprüfung
- Erläuterungen
2. Böse, böse Fehler
Im vorherigen Abschnitt haben wir drei schwerwiegende Fehlerquellen festgelegt, bei denen in der Klasse selber eine entsprechende Ausnahmebehandlung ablaufen soll.
- Angabe eines nicht existenten Startverzeichnisses.
- Es gibt keine Leserechte für die jeweiligen Verzeichnisse.
- Für die Eigenschaften
$deny
und$filetype
wurden keine Arrays angegeben.
Den letzen Punkt ignorieren wir erst mal, dazu komme ich später. Für die anderen beiden bauen wir uns nun eine eigene
Exception-Klasse. Fügt also in der Dir.class.php
unterhalb des error_reporting
folgenden Code ein:
class vollpfosten_exception extends exception {}
Mit dieser Exception wollen wir nun die Trollfehler abfangen. Warum nicht einfach ein simples class Dir extends
Exception
werden sich jetzt einige fragen. Das erkläre ich euch am Ende bei den Erläuterungen.
3.Die erste Ausnahmebehandlung
Hierbei geht es um die Festlegung des Startverzeichnisses in der Methode setRoot
. Was aber ist, wenn wie schon
gesagt, der Benutzer dieser Klasse ein echter Vollpfosten/Troll ist und einen Ordner angibt, der nicht existiert. Dafür
müssen wir nun unsere Methode entsprechend anpassen.
public function setRoot ($var)
{
if (is_dir ($var))
{
$this -> root = $var;
}
else
{
throw new vollpfosten_exception
(
'Troll! Den Ordner '.$var.' gibt es nicht!.'
);
}
}
Erläuterung
Mit if (is_dir ($var))
überprüfen wir, ob der übergebene Wert $var
ein gültiges Verzeichnis ist.
Wenn nicht, so "werfen" wir eine Exception, in der der Benutzer der Klasse sanft darauf hingewiesen wird, dass da etwas
nicht stimmt mit seiner Angabe. Man könnte auch alles in eine Zeile schreiben, aber dann zerhaut es hier je nach Auflösung
die Darstellung.
Gebt mal spaßeshalber ein nicht existentes Verzeichnis an, dann bekommt ihr eine Meldung im Stil von Fatal error:
Uncaught exception 'vollpfosten_exception' with message 'Troll! Den Ordner /srv/www/htdocs/bla gibt es nicht!.' in ...
.
Darum haben wir auch diesmal das Error-Reporting heruntergeschraubt, weil wir sonst schon eh eine Fehlermeldung bekommen
hätten. Das nennt sich Didaktik .
4.Die zweite Ausnahmebehandlung
... tritt dann in Kraft, wenn man keine Leserechte auf den jeweiligen Ordner hat. Dafür müssen wir die if
-Bedingung
in der Methode doNavigate
folgendermaßen erweitern:
private function doNavigate ()
{
if ($handle = opendir ($this -> root))
{
...
}
else
{
throw new vollpfosten_exception
(
'Keine Zugriffsrechte auf '.$this -> root
);
}
}
Erläuterung
Wenn keine Leserechte existieren (if ($handle = opendir ($this -> root))
), so geben wir auch diesmal einen
entsprechenden Hinweis aus. Wenn ihr bei irgendeinem Ordner keine Leserechte habt, so sieht die Meldung dann in etwa so
aus: Fatal error: Uncaught exception 'vollpfosten_exception' with message 'Keine Zugriffsrechte auf
/srv/www/htdocs/bla/blubb' in ...
.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt