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