Ankündigung

Einklappen
Keine Ankündigung bisher.

SPL: DirectoryFilterDots und die Frage nach dem Sinn

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SPL: DirectoryFilterDots und die Frage nach dem Sinn

    Die SPL Iteratoren sind eine tolle Sache aber leider wenig dokumentiert, da steige ich immer noch nicht völlig durch. Kann mir mal jemand erklären, was für einen Sinn die Klasse DirectoryFilterDots hat?

    SPL-StandardPHPLibrary: DirectoryFilterDots Class Reference

    Es wird dort ein RecursiveDirectoryIterator erstellt und zusätzlich . und .. gefiltert. Da der RecursiveDirectoryIterator diese aber ohnehin ignoriert sehe ich beim besten Willen keinen Unterschied.

    PHP-Code:
    // RecursiveDirectoryIterator (hier nicht wirklich rekursiv, da ohne RecursiveIteratorIterator)
    $it = new RecursiveDirectoryIterator(dirname(__FILE__));
    foreach(
    $it as $key=>$value) {
        echo 
    sprintf("%s => %s (%s)\n"$key$valueget_class($value));
    }

    // DirectoryFilterDots (erzeugt die gleiche Ausgabe)
    $it = new DirectoryFilterDots(dirname(__FILE__));
    foreach(
    $it as $key=>$value) {
        echo 
    sprintf("%s => %s (%s)\n"$key$valueget_class($value));

    Habe ich also irgendeinen Vorteil dadurch?
    [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
    [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

  • #2
    nunja, wie der Name und die Beschreibung sagen:
    Further more it filters the entries '.' and '..'.

    Kommentar


    • #3
      Und wie ich schon sagte
      Zitat von fab Beitrag anzeigen
      Da der RecursiveDirectoryIterator diese aber ohnehin ignoriert sehe ich beim besten Willen keinen Unterschied.
      [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
      [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

      Kommentar


      • #4
        Zitat von fab
        Da der RecursiveDirectoryIterator diese aber ohnehin ignoriert sehe ich beim besten Willen keinen Unterschied.
        Bei mir werden im ersten Fall die Dot-Dateien mit ausgegeben. Darauf deutet auch zumindest ein Beispiel in der Doku hin, in dem ebenfalls noch auf isDot geprüft wird.

        - PHP: RecursiveDirectoryIterator::__construct - Manual

        PHP-Code:
        <?php

        // siehe:
        // http://www.php.net/~helly/php/ext/spl/directoryfilterdots_8inc-source.html
        class DirectoryFilterDots extends RecursiveFilterIterator
        {
            function 
        __construct($path)
            {
                
        parent::__construct(new RecursiveDirectoryIterator($path));
            }

            function 
        accept()
            {
                return !
        $this->getInnerIterator()->isDot();
            }

            function 
        key()
            {
                return 
        $this->getInnerIterator()->getPathname();
            }
        }

        $test1 '';
        $test2 '';

        // RecursiveDirectoryIterator (hier nicht wirklich rekursiv, da ohne 
        // RecursiveIteratorIterator)
        $it = new RecursiveDirectoryIterator(dirname(__FILE__));
        foreach(
        $it as $key=>$value) {
            
        $test1 .= sprintf("%s => %s (%s)\n"$key$valueget_class($value));
        }

        // DirectoryFilterDots (erzeugt die gleiche Ausgabe)
        $it = new DirectoryFilterDots(dirname(__FILE__));
        foreach(
        $it as $key=>$value) {
            
        $test2 .= sprintf("%s => %s (%s)\n"$key$valueget_class($value));
        }

        #echo $test1;
        #echo $test2;

        var_dump($test1 === $test2);
        Die ~helly-Doku ist übrigens mittlerweile über drei Jahre alt, wenn die Angaben dort stimmen. Mir ist leider keine Alternative bekannt. Ich finde die Klassen auch äußerst unzureichend dokumentiert.

        Robo hat dazu glaube ich ein paar Artikel.

        - Einträge mit dem Tag SPL

        Kommentar


        • #5
          steht das irgendwo?

          jedenfalls ist der Unterschied ein anderer, RecursiveDirectoryIterator erbt von FilesystemIterator, während DirectoryFilterDots "nur" von DirectoryIterator erbt.

          außerdem kann es sein, daß es DirectoryFilterDots gar nicht mehr gibt (mein System kannte den gar nicht)

          Kommentar


          • #6
            Zitat von mermshaus Beitrag anzeigen
            Bei mir werden im ersten Fall die Dot-Dateien mit ausgegeben. Darauf deutet auch zumindest ein Beispiel in der Doku hin, in dem ebenfalls noch auf isDot geprüft wird.
            Komisch, bei mir ist es nicht so, gut zu wissen dass man sich nicht auf diese Einstellung verlassen sollte.

            Zitat von mermshaus Beitrag anzeigen
            Robo hat dazu glaube ich ein paar Artikel.

            - Einträge mit dem Tag SPL
            Danke, ich werde mal stöbern!

            Zitat von Dormilich Beitrag anzeigen
            jedenfalls ist der Unterschied ein anderer, RecursiveDirectoryIterator erbt von FilesystemIterator, während DirectoryFilterDots "nur" von DirectoryIterator erbt.
            Stimmt (außer dass es nicht DirectoryIterator ist sondern RecursiveFilterIterator), allerdings auch nur ein Grund mehr, RecursiveDirectoryIterator zu benutzen.

            Zitat von Dormilich Beitrag anzeigen
            außerdem kann es sein, daß es DirectoryFilterDots gar nicht mehr gibt (mein System kannte den gar nicht)
            Ich habe ihn heute erst entdeckt und musste ihn auf PHP 5.2.12 ebenfalls selber deklarieren. Allerdings hatte ich nichts dazu in den Changelogs gefunden, also wurde er vielleicht still und heimlich wegen Bedeutungslosigkeit entfernt?
            [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
            [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

            Kommentar

            Lädt...
            X