Hauptmenü

Untermenü

OOP mit PHP5 - Einstiegstutorial 1 - Durchlaufen der Ordner

1. Die Abschnitte

2. Rekursion

Jetzt wollen wir erst mal nur alle Ordner rekursiv durchlaufen. Das bedeutet einfach gesagt, dass die Funktion sich solange selber aufruft, wie eine Bedingung wahr ist. Das sieht dann so aus.


if (sizeof ($sort) > 0)
{
  natcasesort($sort);
  foreach ($sort as $var)
  {
    if (is_dir ($var))
    {
      $this -> setFolder ($var);
      $this -> doNavigate();
    }
  }
}

Erläuterung

Mit foreach durchlaufen wir das Array $sort und überprüfen, ob es sich dabei um einen Ordner handelt (is_dir). Wenn dem so ist, rufen wir die noch nicht existierende Methode setFolder auf. Und danach erfolgt die Rekursion, indem die Methode doNavigate sich selber noch mal aufruft. Damit das aber funktioniert, muss permanent die Eigenschaft $root angepasst werden. Und das geschieht in der Methode setFolder($var). Packt in diese Methode ruhig mal ein echo $this -> root.'<br>';, dann werdet ihr es sehen.

setFolder


private function setFolder ($folder)
{
  $this -> root $folder;
}

Das ist ganz einfach. Hier wird ständig das Startverzeichnis angepasst, indem die Eigenschaft $root neu gesetzt wird. Und da sie innerhalb(!) der Klasse "global" verfügbar ist, haben alle Methoden direkten Zugriff darauf. Man muss hier also nicht mit return oder dem unsäglichen global arbeiten.

3. Ordner verbieten

Wie schon eingangs gesagt, wollen wir bestimmte Ordner von der Suche ausschließen. Das haben wir auch schon festgelegt, indem wir der Eigenschaft $deny mit der Methode denyFolder ein Array aller verbotenen Verzeichnisse zugewiesen haben. Zur Validierung bauen wir uns jetzt die Methode checkFolder, die die Überprüfung vornimmt.


private function checkFolder ($folder)
{
  foreach ($this -> deny as $forbidden)
  {
    $tmp explode ('/'$folder);
    if ($tmp[count($tmp) -1] == $forbidden)
    {
      return true;
    }
  }
}

Erläuterung

In der foreach-Schleife durchlaufen wir die "Array"-Eigenschaft $deny (immer an die Pseudovariable $this denken). Dabei zerlegen wir die Variable $folder mittels explode in die einzelnen Ordner, greifen den letzten heraus ($tmp[count($tmp) -1] und überprüfen, ob der in der Verbotsliste steht. Wenn ja, wird die Schleife beendet und ein true zurückgegeben. Warum kein preg_match oder strpos? Kommt beim nächsten Tutorial. Soll ja abwechslungsreich sein.

Um nun diese Überprüfung nutzen zu können, rufen wir sie in der Methode doNavigate auf. Wenn kein true zurückgegeben wird, so überspringen wir diesen Teil der Schleife. Darum müsst ihr den bereits bestehenden Code dort so ändern.


if (is_dir ($var))
{              
  if (!$this -> checkFolder($var)) 
  {
    $this -> setFolder ($var);
    $this -> doNavigate();
  }
}

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