Ankündigung

Einklappen
Keine Ankündigung bisher.

Grundlegende Frage zu Funktionen mit "return" Anweisung

Einklappen

Neue Werbung 2019

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

  • Grundlegende Frage zu Funktionen mit "return" Anweisung

    Huhu an alle!

    Ich hab da mal ne Frage, die mir immer wieder durch den Kopf geht, wenn ich mir eine Funktion bastle:

    Ich hab in der Funktion irgend eine Routine, z.B. das handle "opendir".
    Wenn ich nur z.B. eine Schleife mache, zum überprüfen ob eine Datei existiert und dann "return true" oder "return false" als Anweisung habe und erst nachher die Anweisung "closedir()" benutze, wird die dann überhaupt noch aufgerufen?

    Also z.B. (ok ist ein blödes Beispiel, weils ja file_exist gibt.. )

    PHP-Code:
    function checkExist($needle$dir) {
        if (
    $handle opendir($dir)) {
            while (
    false !== ($file readdir($handle))) {
                if (
    $needle == $file) { return true; }
            }
            return 
    false;
            
    closedir($handle);
        }

    Wird dann "closedir($handle);" überhaupt noch aufgrufen?

    Gruss

    73


  • #2
    Nein. Jeglicher Code nach einem return wird nicht mehr ausgeführt. Das was du machst sollte besser so aussehen:

    PHP-Code:
    function checkExist($needle$dir) {
        
    $result false;
        if (
    $handle opendir($dir)) {
            while (
    false !== ($file readdir($handle))) {
                if (
    $needle == $file) {
                    
    $result true;
                    break;
                }
            }
            
    closedir($handle);
        }
        return 
    $result;

    In deinem Fall gibt es eben auch den Zustand in dem die Funktion gar nichts zurückgibt (wenn die erste IF Abfrage fehl schlägt).

    Kommentar


    • #3
      Hehe, ok dachte ich mir doch..

      Es ist nur so, dass ich schon sehr viele Scripts gesehen habe, die auf dieser Methode basieren..
      Da konnte ich fast nicht glauben, dass die das alle falsch machen/verstehen, weil ich ja selber kein Profi bin.

      Aber das ist gut zu wissen, danke.

      Btw.: Die Funktion hab ich auch nur schnell geschrieben ohne sie zu testen, war ja nur ein Beispiel

      Kommentar


      • #4
        Zitat von 7three Beitrag anzeigen
        Da konnte ich fast nicht glauben, dass die das alle falsch machen/verstehen, weil ich ja selber kein Profi bin.
        "Falsch" ist es nicht ,weil der Code ja wie gesagt nicht mehr weiter ausgeführt wird.
        Kann natürlich unübersichtlich sein.

        Kommentar


        • #5
          Naja toter Code ist meiner Meinung nach schon "falsch". Denn der Programmierer hat ihn wohl aus dem Grund dort eingefügt weil er möchte das er ausgeführt wird. Von daher würde ich es schon als Fehler bezeichnen.

          Kommentar


          • #6
            Achso, ja. Ich hab' mir das Beispiel nicht richtig angeschaut.

            Kommentar


            • #7
              es gibt aber auch funktionen bei dennen es sinnvoll ist, innerhalb einer if etc ein return zu machen.
              Under Construktion

              Kommentar


              • #8
                Es geht ja auch darum das noch Code HINTER return kommt der "tot" ist, also in keinem Fall ausgeführt wird! Wenn du innerhalb einer IF Abfrage ein return hast dann gibt es immer noch den Fall dass die IF Abfrage nicht zutrifft und der Code danach normal ausgeführt wird.

                Kommentar


                • #9
                  Ja, wobei es ja nicht einmal "in keinem Fall" sein muss. Es reicht ja schon wenn es in einem Abzweigbaum zutrifft... auf jeden Fall gilt es darauf zu achten, dass man den Server nicht unnötig belastet indem man die Funktion "abwürgt" bevor diese richtig beendet wurde.

                  Kommentar


                  • #10
                    Siehe dazu Codeoptimierung:Wächter - PHP.de Wiki
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      Mhh das ist sicher hilfreich, danke. Was ich dort jetzt nicht gefunden habe und mich auch interessieren würde, ist:
                      Wenn ich in einer Funktion einen "foreach" Durchlauf mache und innerhalb des Durchlaufs "return" anwende, sollte dann vorher die Schleife beendet werden, respektiv, tut das PHP / dem Server irgendwie weh, wenn ich die Schleife nicht beende?

                      Hehe, da tauchen immer mehr Fragen auf, je länger ich darüber nachdenke

                      Kommentar


                      • #12
                        Nein die Funktion springt sofort zurück sobald return aufgerufen wird. Es wird keine weiterer Durchlauf der Schleife mehr gemacht. Obs PHP weh tut? Ich würd sagen nein Ist eigentlich sogar besser denn dann muss PHP nicht noch die restlichen Elemente durchgehen.

                        Kommentar


                        • #13
                          Regulär beendet wird eine Schleife mit break; return funktioniert nur für den Sonderfall, dass man damit auch gleich eine Funktion/Methode/ein Include abbricht.
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar

                          Lädt...
                          X