franz: mehrere Werte einer function zurückgeben

Hallo,

Ich würde gerne wissen ob es möglich ist mehrere Werte die in einer Funktion berechnet werden zurückzugeben bzw an andere Funktionen zu übergeben.
Vill anders als mit return.

danke

mfg

Franz

  1. Hallo,

    Ich bin kein Profi, aber man könnte ein Array verwenden...

    MFG

    1. Ich bin kein Profi, aber man könnte ein Array verwenden...

      das array per return zurückgeben oder wie?

      mfg

      1. Moin!

        Ich bin kein Profi, aber man könnte ein Array verwenden...

        das array per return zurückgeben oder wie?

        Exakt. Oder man gibt ein Objekt zurück, wenn ohnehin OOP angesagt ist.

        Alternativ: Variablen als Referenz übergeben - bestes Beispiel ist die Funktion preg_match bzw. genauer der Parameter &$Treffer.

        - Sven Rautenberg

        1. Alternativ: Variablen als Referenz übergeben - bestes Beispiel ist die Funktion preg_match bzw. genauer der Parameter &$Treffer.

          Die Funktion sollte immer noch das selbe returnen aber ich würde gerne zusätzlich eine variable übergeben, würde das mit dieser Methode funktionieren?

          wenn ja könntest du sie mir noch ein bisschen näher erläutern?
          Werde aus dem link ned schlau :(

          danke schon jetzt

          Franz

          1. Hi,

            Die Funktion sollte immer noch das selbe returnen aber ich würde gerne zusätzlich eine variable übergeben, würde das mit dieser Methode funktionieren?

            Wozu willst du gleich bleibende Werte uebergeben?

            wenn ja könntest du sie mir noch ein bisschen näher erläutern?
            Werde aus dem link ned schlau :(

            http://www.php.net/manual/en/functions.returning-values.php

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
            1. Wozu willst du gleich bleibende Werte uebergeben?
              http://www.php.net/manual/en/functions.returning-values.php

              Ich will nicht gleich bleibende Werte übergeben sondern ich will das die Funktion die ich früher mal gebastelt haben und oft in meinem script verwende immer noch die selben werte returnt(also in dem fall 1 oder 0), ich aber zusätzlich andere werte die in dieser Funktion verwendet bzw errechnet werden übergeben.

              deswegen suche ich eine andere Methode als return oder komm ich da nicht drum rum?

              mfg

              1. Hi,

                Ich will nicht gleich bleibende Werte übergeben sondern ich will das die Funktion die ich früher mal gebastelt haben und oft in meinem script verwende immer noch die selben werte returnt(also in dem fall 1 oder 0), ich aber zusätzlich andere werte die in dieser Funktion verwendet bzw errechnet werden übergeben.

                deswegen suche ich eine andere Methode als return oder komm ich da nicht drum rum?

                Du wirst sogar eine andere Methode als return benutzen *muessen*, wenn du die aufrufenden Stellen nicht anpassen willst - denn die erwarten ja nach wie vor lediglich *einen* Wert, 1 oder 0, als Rueckgabe.

                Wenn du das so machen willst - dann geht Svens Vorschlag mit den Referenzen schon in die richtige Richtung.

                Das solltest du dir aber noch mal ueberlegen - denn etwas "sauberes" kommt dabei vermutlich nicht heraus.

                MfG ChrisB

                --
                „This is the author's opinion, not necessarily that of Starbucks.“
                1. hmm muss nicht "sauber" werden...
                  hab mir jezz ziemlich viel über Referenzen durchgelesen trotzdem versteh ich nicht wie das funktionieren soll auch aus diesem link preg_match wer ich nicht schlauf :(

                  mfg

                  1. Hi,

                    hab mir jezz ziemlich viel über Referenzen durchgelesen trotzdem versteh ich nicht wie das funktionieren soll auch aus diesem link preg_match wer ich nicht schlauf :(

                    Auf der Seite, die ich dir bereits verlinkt hatte, findest du unten:

                    For more information on references, please check out References Explained

                    MfG ChrisB

                    --
                    „This is the author's opinion, not necessarily that of Starbucks.“
                    1. References Explained

                      und jezz rat mal wo ich nachgeschaut hab :P

                      1. Hi,

                        und jezz rat mal wo ich nachgeschaut hab :P

                        Bestimmt nicht bei den Tipps fuer Fragende - denn sonst wuerdest du ja vielleicht eine konkrete Frage stellen, anstatt uns nur mitzuteilen, dass du "nichts verstehst".

                        MfG ChrisB

                        --
                        „This is the author's opinion, not necessarily that of Starbucks.“
                        1. Habs $GLOBALS probiert aber das funktioniert nicht.
                          Mit einem Beispiel wäre mir sehr geholfen.

                          mfg

                          1. Hi,

                            Habs $GLOBALS probiert aber das funktioniert nicht.

                            Wieso zum Geier kommst du mir jetzt mit einem "funzt nich" - obwohl ich dich gerade eben auf die Tipps fuer Fragende hinwies?

                            MfG ChrisB

                            --
                            „This is the author's opinion, not necessarily that of Starbucks.“
                            1. Lieber ChrisB

                              Ich habe nun versucht mein Problem nach folgender Methode zu lösen, welche auf einer der verlinkten Seiten gefunden hatte und mir als einleuchtend erschien:

                                
                              <?php  
                              $var1 = "Beispielvariable";  
                              $var2 = "";  
                                
                              function global_references($use_globals)  
                              {  
                                  global $var1, $var2;  
                                  if (!$use_globals) {  
                                      $var2 =& $var1; // nur innerhalb der Funktion sichtbar  
                                  } else {  
                                      $GLOBALS["var2"] =& $var1; // auch im globalen Kontext sichtbar  
                                  }  
                              }  
                                
                              global_references(false);  
                              echo "var2 wurde auf '$var2' gesetzt\n"; // var2 ist ''  
                              global_references(true);  
                              echo "var2 wurde auf '$var2' gesetzt\n"; // var2 ist 'Beispielvariable'  
                              ?>  
                              
                              

                              Jedoch kam ich nach einigen misslungenen Versuchen und nach erneutem Überdenken dieser Methode zu dem Schluss, dass dies wohl nicht der richtige Weg ist.

                              Nun stehe ich erneut vor dem selben Problem und die meiner Meinung nach sehr "einsteigerunfreundliche" Art von php.net die Befehle, Funktionen und Methoden ihrer Scriptsprache zu erklären trägt ihres dazu bei, dass ich nicht weiterkomme.

                              Ich werden nun versuchen ihnen dazulegen was ich aufgrund der von ihnen verlinkten Seiten(bzw. indirekt verlinkten Seiten) über Referenzen gelernt habe, um es ihnen zu erleichtern mir das benötigte Verständnis zum Lösen des Problems zu vermitteln.

                              Mit Referenzen kann man dem gleichen Inhalt einer Variable verschiedene Namen zuweisen.
                              Um eine Referenz zu schaffen benutzt man den Operator =&.
                              Man kann auch Arrays referenzieren.
                              Wenn man eine undefinierte Variable referenziert wird sie erstellt.
                              Man kann Variablen an Funktionen per Referenz übergeben, so dass die Funktion ihre Argumente modifizieren kann. Jedoch kann ich dies so wie es auf php.net beschrieben wird und so ich wie ich es verstehe nicht zu meinen Gunsten nutzten.

                              Ich hoffe es fällt ihnen nun leichter mir zu helfen.

                              mfg

                              Franz

                              1. Hi,

                                Man kann Variablen an Funktionen per Referenz übergeben, so dass die Funktion ihre Argumente modifizieren kann. Jedoch kann ich dies so wie es auf php.net beschrieben wird und so ich wie ich es verstehe nicht zu meinen Gunsten nutzten.

                                Warum nicht?

                                MfG ChrisB

                                --
                                „This is the author's opinion, not necessarily that of Starbucks.“
                                1. Das einzige das mir als halbwegs Sinnvoll erscheint wäre folgendes:

                                    
                                    
                                  <?php  
                                  function altefunktion(&$var)  
                                  {  
                                      $var = 6;  
                                  }  
                                    
                                  funktion($a);  
                                  // $a ist 6  
                                  ?>  
                                    
                                  
                                  

                                  mfg

                                  1. Hi,

                                    Das einzige das mir als halbwegs Sinnvoll erscheint wäre folgendes:

                                    <?php

                                    function altefunktion(&$var)
                                    {
                                        $var = 6;
                                    }

                                    funktion($a);
                                    // $a ist 6
                                    ?>

                                      
                                    Aha.  
                                    Und?  
                                      
                                    MfG ChrisB  
                                      
                                    
                                    -- 
                                    „This is the author's opinion, not necessarily that of Starbucks.“
                                    
                                    1. Aha.
                                      Und?

                                      Funktionier aber jetzt muss ich erst recht überall wo ich die Funktion verwendet hab einen zusätzlichen Wert in die Klammer schreiben.
                                      Ist das der Ansatz oder muss ich weitersuchen?

                                      mfg

                                      Franz

                                      1. Hi,

                                        Funktionier aber jetzt muss ich erst recht überall wo ich die Funktion verwendet hab einen zusätzlichen Wert in die Klammer schreiben.
                                        Ist das der Ansatz

                                        Wenn du das, was eine Funktion macht, signifikant aenderst - insb. auch, welche Werte sie veraendert/zurueckgibt - dann wuerde ich sagen, ja.

                                        oder muss ich weitersuchen?

                                        Globale Variablen waeren ein weiterer Weg - ebenfalls ein ggf. riskanter und nicht sonderlich sauberer.

                                        MfG ChrisB

                                        --
                                        „This is the author's opinion, not necessarily that of Starbucks.“
                                        1. echo $begrüßung;

                                          Funktionier aber jetzt muss ich erst recht überall wo ich die Funktion verwendet hab einen zusätzlichen Wert in die Klammer schreiben.
                                          Ist das der Ansatz
                                          Wenn du das, was eine Funktion macht, signifikant aenderst - insb. auch, welche Werte sie veraendert/zurueckgibt - dann wuerde ich sagen, ja.

                                          Nein, das muss nicht unbedingt. Es gibt ja die Möglichkeit, Parameter wegzulassen und dafür einen Default-Wert anzugeben. Das geht auch für Referenz-Parameter. (Allerdings glaube ich mich zu erinnern, dass das nicht mit allen PHP-Versionen geht.)

                                          function foo($a, &$b = null) {
                                              $b = ...;
                                            }

                                          Das kann man nun als foo($x) oder foo($x, $y) aufrufen.

                                          Globale Variablen waeren ein weiterer Weg - ebenfalls ein ggf. riskanter und nicht sonderlich sauberer.

                                          Aus Funktionen heraus globale Werte zu ändern, ist in den meisten Fällen keine gute Idee. Der Zusammenhang zwischen dem Funktionsaufruf und einer "unbeteiligten" Variablen ist auf den ersten Blick nicht erkennbar. Wer diesen Weg geht, sollte ihn zumindest gut dokumentieren.

                                          echo "$verabschiedung $name";

                                        2. Naja habs jezz so gemacht.
                                          Danke für die Hilfe
                                          mfg
                                          Franz

                                      2. Hallo Franz,

                                        Funktionier aber jetzt muss ich erst recht überall wo ich die Funktion verwendet hab einen zusätzlichen Wert in die Klammer schreiben.
                                        Ist das der Ansatz oder muss ich weitersuchen?

                                        Du hast ein Problem mit Funktionsparametern. Erste Anlaufstelle wäre somit der Handbuchabschnitt Funktionen, was - wie ich finde - naheliegend ist. Dort gibt es doch tatsächlich einen Unterabschnitt Funktionsparameter mit schönen Beispielen. PHP stellt Dir Eigenschaften zur Verfügung, die Dir weiterhelfen könnten.

                                        Freundliche Grüße

                                        Vinzenz