frankx: Standard PHP Library

Beitrag lesen

Hellihello,

ausgehend von diesen <http://forum.de.selfhtml.org/archiv/2008/8/t175534/#m1154285@Hinweisen zur SPL> bin ich auf einen Artikel aus dem PHP|architecture magazine von Jan 2005 gestoßen. Darin unter anderem

"The SPL extension didn’t get as much buzz as PHP5’s new XML and OOP features, but that didn’t stop it from making it to the final distribution ... .This collection of interfaces and classes ... currently focused on solving one problem—Iterators."

Mit scandir() lässt sich ja nun schön eine rekursive Funktion bauen, die sich selbst wieder aufruft, wenn der aktuelle Eintrag ein directory ist. Das alles geht aber auch mit dem RecursiveDirectoryIterator in Kombination mit dem RecursiveIteratorIterator. Wenn ich es recht sehe, ist es dem RII egal, woher die rekursive Struktur stammt. Nur Datenbanken bilden solche Strukturen rekursiver Art wohl nicht ab (? oder doch, mit JOIN und 1 zu n Struktur, 1 Kunde - 2 Bestellungen - 8 Produkte etc.pp.?).

Immerhin dachte ich, wenn man kapieren will, warum die _Standard_-Bibliothek nur aus Iteratoren besteht (und ein paar Funktionen wie register_autoload() - die aber nischt mit Iteration zu tun hat), könnte man damit ja mal rumexperimentieren. Eine verschachtelte Liste aus dem o.g. zu erstellen habe ich mal versucht, mit alternativerSyntax und HTML-Bausteinen, sowie mit DOMFunktionen. Vielleicht betreibt ja irgendwer sonst außer dedlfix - aber gerne auch wieder dedlfix himself (;-) - noch Recherche auf dem Gebiet und kann irgendwas sinniges dazu beisteuern. Ich kapiere zwar irgendwie, dass diese Iteratoren eine Art von Verallgemeinerung eines Datenstrukturhandlings (unabhängig von ihrer Herkunft) bedeuten soll (bzw. ist, es ist ein "Verhaltensmuster", ein "pattern" wie zB. Factory oder Singleton auch eins ist, aber eben aus dem Bereich "behaviour"), so dass vermutlich u.g. Schablonen auch mit anderen Datenquellen Wiederverwendung finden können, bin mir aber nicht ganz sicher, den "Clou" der Sache wirklich kapiert zu haben.

  
// set Directory to recursively iterate through  
$dir_path = "it_test";  
  
// create instance of RecursiveDirectoryIterator predefined SPL-class  
$my_recursive_dir_reader_iterator = new RecursiveDirectoryIterator($dir_path);  
  
// create instance of RecursiveIteratorIterator passing over the recursive DirectoryIterator  
$dir_or_file_path = new RecursiveIteratorIterator($my_recursive_dir_reader_iterator, true);  
  
// creating a verschachtelte list using alternative Syntax  
?>  
<ul>  
<?php foreach ( $dir_or_file_path as $file ):;?>  
 <?php if ($lastDepth > $dir_or_file_path->getDepth()): //on the way back up?>  
   </ul></li>  
  <?php endif;?>  
 <li>  
  depth:  <?php echo $dir_or_file_path->getDepth()?>  
  name: <?php echo $file;?>  
  <?php if ($dir_or_file_path->hasChildren()): // subdirectories?>  
 <ul>  
  <?php endif;?>  
  <?php if (!$dir_or_file_path->hasChildren()): // files will get a closing </li>?>  
   </li>  
  <?php endif;?>  
  <?php $lastDepth = $dir_or_file_path->getDepth(); // keep in mind where we come from?>  
  
<?php endforeach;?>  
<!-- keine idee, warum da zwei schließende uls hinmüssen...-->  
</ul></ul>  
  
<hr>  
  
<?php  
 // creating a verschachtelte list using DOMFunktions  
 $dom = new DOMDocument;  
 $dom->formatOutput = true;  
 $master_ul_element = $dom->createElement("ul");  
 $dom->appendChild($master_ul_element);  
  
 //iterate recursively through the object  
 foreach ( $dir_or_file_path as $file ) {  
  // create li-Element with text  
  $li = $dom->createElement("li");  
  $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  
  if ($dir_or_file_path->getDepth() == 0) {  
   $master_ul_element->appendChild($li);  
  } else { //if not, append to the one above  
   $sub_ul_element[$dir_or_file_path->getDepth()-1]->appendChild($li);  
  }  
  // if iteration-element has children, create an sub-ul-element  
  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  
 echo $dom->saveXML();  
  

Dank und Gruß,

frankx

--
tryin to multitain  - Globus = Planet != Welt
0 80

Standard PHP Library

frankx
  • php
  1. 0
    Tom
    1. 1
      Cybaer
    2. 0
      Peter Pan
      1. 0
        Tom
        1. 3
          Christian Seiler
          1. 0
            Tom
            1. 0
              Christian Seiler
    3. 0
      Sympathisant
      1. 0
        frankx
        1. 0
          Sympathisant
          1. 0
            frankx
            1. 0
              Sympathisant
            2. 0
              Vinzenz Mai
              1. 0
                Sympathisant
                1. 0

                  Kann das denn sein?

                  Tom
                  • menschelei
                  1. 0
                    Vinzenz Mai
                    1. 0
                      Tom
                  2. 12

                    Eine Lanze für strukturierte Programmierung und OOP

                    Christian Seiler
                    • programmiertechnik
                    1. 0

                      [++] SCNR

                      molily
                      1. 0
                        Tom
                    2. 0
                      Tom
                      1. 0
                        Christian Seiler
                        1. 0

                          [++] Eine Lanze [..]

                          Sympathisant
                          1. 0
                            Dirk Dorweiler
                            1. 0
                              Sympathisant
                              1. 0
                                Vinzenz Mai
                                1. 0
                                  Sympathisant
                                  1. 0
                                    Tom
                                    1. 0
                                      Sympathisant
                                      1. 2

                                        [++] Eine Lanze [..] für die sachbezogen diskussion

                                        frankx
                                      2. 0
                                        Tom
                                        1. 0
                                          Sympathisant
                                          1. 0

                                            Anonymer Stänkerer

                                            Tom
                                            • menschelei
                                            1. 0

                                              Anonymer Stänkerer??

                                              Sympathisant
                      2. 0
                        Dirk Dorweiler
                        1. 0
                          Tom
                          1. 0
                            Sven Rautenberg
                            1. 0

                              Nur eine Zwischennachricht [und ein Spendenaufruf]

                              Tom
                              1. 0
                                Vinzenz Mai
                                1. 0
                                  Tom
                                  1. 0
                                    Timo "God's Boss" Reitz
                                    1. 0
                                      Tom
                                  2. 0
                                    Dirk Dorweiler
                              2. 0
                                Tom
                                1. 0
                                  Sympathisant
                                  1. 0
                                    Tom
                                    1. 0
                                      Sven Rautenberg
                                      1. 0
                                        Tom
                                        1. 0
                                          Sympathisant
                                          • menschelei
                                          1. 0

                                            Es wird Text

                                            Tom
                                            1. 0
                                              Timo "God's Boss" Reitz
                                    2. 3
                                      Sympathisant
                                      1. 0

                                        Abschliessendes...

                                        Sympathisant
                                        • menschelei
                                2. 0

                                  ... die Hoffnung stirbt zuletzt

                                  Vinzenz Mai
                                  1. 0
                                    Tom
                                    1. 0
                                      Christian Seiler
                                    2. 0
                                      Dirk Dorweiler
                                    3. 0
                                      Vinzenz Mai
                                      1. 0
                                        Sven Rautenberg
                                        1. 0

                                          pro und contra OOP

                                          frankx
                                          1. 0
                                            Vinzenz Mai
                                          2. 0
                                            Sven Rautenberg
                                            1. 0
                                              at
                                        2. 0
                                          Sympathisant
                            2. 0
                              Tim Tepaße
                    3. 0
                      Dirk Dorweiler
        2. 0

          (Iteratoren)

          Tim Tepaße
          1. 0

            Iteratoren - mysqli-result-Iterator

            frankx
            1. 0
              Vinzenz Mai
              1. 0
                frankx
            2. 0

              mysqli-result-Iterator looft, aber "Pattern" mit this nicht

              frankx
    4. 0

      99 bottles of beer

      Tom
  2. 0

    Standard PHP Library - SplDoublyLinkedList

    frankx
    1. 0
      dedlfix
      1. 0
        frankx
        1. 0
          dedlfix