Vinzenz Mai: Verzeichnisse auslesen

Beitrag lesen

Hallo,

Ich bitte Dich, Verarbeitung und Ausgabe besser zu trennen.
Was im DOM-Versuch ja gegeben wäre, oder?

Ist es wirklich gegeben? Sagen wir so: nicht die DOM-Funktionen, sondern die Iteratoren nehmen Dir die Verarbeitung, die Du in Deiner Funktion "overview" hattest, ab. Du kannst Dich in einer einfachen foreach-Schleife durch jedes Element des Verzeichnisbaumes hangeln. Ja, der Code gewänne durch die Iteratoren an Eleganz *und* Aussagkraft, wenn Du entsprechende Bezeichner wähltest - und den Code angemessener kommentiertest. Ein paar Berichtigungen habe ich bereits eingearbeitet, eine viel größere Liste an (zum Teil rhetorischen) Fragen hinzugefügt, die Dir als Anregung für sinnvollere Kommentierung dienen können.

  
  // set Directory to recursively iterate through  
  // $startDirectory? Nein, $dir_path ist nicht gut gewählt.  
  $dir_path = "it_test";  
  
  // create instance of RecursiveDirectoryIterator predefined SPL-class  
  // ist das wirklich ein guter Variablenname?  
  $my_recursive_dir_reader_iterator = new RecursiveDirectoryIterator($dir_path);  
  
  // create instance of RecursiveIteratorIterator passing over the recursive DirectoryIterator  
  // $dir_or_file_path ist schrecklich umständlich, warum nicht einfach $element?  
  $dir_or_file_path = new RecursiveIteratorIterator($my_recursive_dir_reader_iterator, true)  
  
  // create a nested unordered list using DOM-functions  
  $dom = new [link:http://www.php.net/manual/de/class.domdocument.php@title=DOMDocument];  
  // You like it nice indentation?  
  // Me too!  
  $dom->formatOutput = true;  
  // Tipp: Bitte sei konsistent bei Deinen Bezeichnern. Warum nicht komplett camelCase?  
  // master ul element scheint mir auch optimierbar (rootList ?)  
  $master_ul_element = $dom->createElement("ul");  
  $dom->appendChild($master_ul_element);  
  
  // iterate recursive through the object  
  // Welches Objekt?  
  // Durchlaufe den Verzeichnisbaum.  Die Iteratoren ermöglichen die Traversierung des gesamten Baumes  
  // ohne dass wir uns selbst um die Rekursion kümmern müssen. Da spielen rekursive Iteratoren ihre Stärke aus!  
  // Statt $file böte sich $path an  
  foreach ( $dir_or_file_path as $file ) {  
      // create li-Element with text  
      // Was für Text? Genau sowas ist *kein* guter Kommentar  
      $li = $dom->createElement("li");  
      // Text wäre somit die aktuelle Verschachtelungstiefe und der Pfad.  
      // Warum sagst Du nicht genau das, sondern einfach nur "text"?  
      $text = "depth: " . $dir_or_file_path->getDepth() . " - name: " . $file;  
      $textElement = $dom->createTextNode($text);  
      $li->appendChild($textElement);  
  
      // check if on top level, then append to master-ul-element  
      // Wir befinden uns im Startverzeichnis, hänge das Listenelement  
      // mit dem Pfad des aktuellen Elementes in die äußere Liste  
      if ($dir_or_file_path->getDepth() == 0) {  
          $master_ul_element->appendChild($li);  
      }  
      else {  
          // if not, append to the one above  
          // Was ist "one above"?  
          // ein weiterer verbesserungswürdiger Variablenname  
          $sub_ul_element[$dir_or_file_path->getDepth()-1]->appendChild($li);  
      }  
  
      // Nutze Leerzeilen auf sinnvolle Weise, um den Code zu strukturieren  
      // if iteration-element has children, create an sub-ul-element  
      // which iteration element? current? next? last?  
      // Übersetzt: Es handelt sich um ein (nicht leeres?) Verzeichnis!  
      // Warum schreibst Du nicht das, sondern etwas völlig abstraktes?  
      if ($dir_or_file_path->hasChildren()) {  
          $sub_ul_element[$dir_or_file_path->getDepth()] = $dom->createElement("ul");  
          $li->appendChild($sub_ul_element[$dir_or_file_path->getDepth()]);  
      }  
  }  
  
  // some output  
  // Gib nicht so viel aus, gib lieber etwas zurück :-)  
  echo $dom->saveXML();  

Warum wird das nicht in eine ordentlich benannte Funktion (oder Methode) gepackt? Warum fliegt hier Code irgendwie in der Gegend herum?

Freundliche Grüße

Vinzenz