Hauptmenü

Untermenü

OOP mit PHP5 - Einstiegstutorial 2 - Die Vollpfosten-Exception

1. Die Abschnitte

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.

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 grins .

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