OOP mit PHP5 - Einstiegstutorial 1 - Durchlaufen der Ordner
1. Die Abschnitte
- Überlegungen
- Festlegen der Eigenschaften
- Einleiten der Startsequenz
- Die Navigation
- Durchlaufen der Ordner
- Erfassung der Dateien
- Zusammenfassung
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