Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Verständnisproblem Cally by Reference/Value

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Verständnisproblem Cally by Reference/Value

    Hallo,

    gerade übe ich, wie Funktionen aufgebaut sind. Eigene habe ich natürlich noch nicht erstellt. Bin totaler Anfänger.

    Ich habe ein Verständnisproblem von Call by Value und Call by Reference und bin auf der Suche nach einem Beispiel.

    Bisher habe ich mein Übungsbuch bemüht (die Erklärung aber nicht verstanden) und auch im Internet (Google, php-Handbuch...) und hier im Forum geschaut. Der Unterschied ist mir leider trotzdem nicht ganz so klar geworden.

    Call by Reference verstehe ich so, dass ein Verweis auf meine Variable herausgegeben wird. So als würde man mal ganz platt sagen: Schau mal dort in der Variablen nach, was drinsteht.

    Call by Value dagegen ist mir ein einziges Rätsel. Dort richte ich eine Variable mit einem bestimmten Namen ein, verarbeite sie wie auch immer und erhalte beim Aufrufen wieder den Wert, den ich ihr anfangs zugewiesen habe.

    Das verstehe ich nicht ganz, denn eigentlich möchte ich ja etwas anderes haben. Zum Beispiel das Ergebnis einer Berechnung (oder ein anderes Argument, das ich mit "return" ausgeben kann). In einer Funktion müssen sich doch die Werte ändern, sonst brauche ich erst gar keine Funktion?

    Ich würde mich riesig freuen, wenn mir jemand ein praktisches Beispiel nennen könnte, für was das Call by Value eingesetzt werden könnte.

    LG
    [SIZE="1"][FONT="Arial"]Mit kleinen Schritten vorwärts. :) [/FONT][/SIZE]


  • #2
    Call by value heißt, es wird eine „Kopie“ des Inhaltes einer Variablen übergeben. Damit kannst du in der Funktion anstellen, was du willst - es wirkt sich nicht auf die Umgebung außerhalb der Funktion aus. So kannst du mit deiner Funktion wenig an den Daten „kaputt machen“. Wenn du aus dieser Funktion heraus ein Ergebnis zurückgeben willst, dann kannst du das nur per return machen.

    Call by reference hingegen heißt, dass eine Art „Zeiger“ auf eine Variable übergeben wird. Jede Veränderung des Wertes der Variablen, die du innerhalb deiner Funktion vornimmst, wirkt sich damit auch außerhalb der Funktion aus.
    Setzt du innerhalb deiner Funktion eine per reference übergebene Variable $x auf den Wert y - dann hat $x nachher auch noch den Wert y, wenn deine Funktion längst zu ende ist. Damit hast du nicht mehr das „Problem“, aus deiner Funktion heraus nur eine Variable zurückgeben zu können - sondern du kannst alle per reference übergebenen Parameter gleich aus deiner Funktion heraus ändern, mit direkten Auswirkungen außerhalb. Das kann praktisch sein - aber natürlich ebenso „gefährlich“, wenn du aus Unachtsamkeit Variablen veränderst, bei denen du das eigentlich nicht wolltest.

    Kommentar


    • #3
      Hier noch ein Codebeispiel dazu:

      Call by value:
      PHP-Code:
      function something($parameter) {
          
      $parameter 'variable geändert';
          echo 
      $parameter;
      }

      $var 'test';
      something($var);

      echo 
      $var

      //Ausgabe: 
      //variable geändert
      //test 
      Call by reference:
      PHP-Code:
      function something(&$parameter) {
          
      $parameter 'variable geändert';
          echo 
      $parameter;
      }

      $var 'test';
      something($var);
      echo 
      $var

      //Ausgabe: 
      //variable geändert
      //variable geändert 
      Im zweitem Beispiel hat die Funktion quasi die Möglichkeit den Inhalt der Variablen die übergeben wurde außerhalb des Gültigkeitsbereiches der Funktion zu ändern.

      Standardverfahren ist Call by Value.
      "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

      Kommentar


      • #4


        Hallo ChrisB,

        als du mir die Auswirkungen innerhalb und außerhalb der Funktion erklärt hast, hat es bei mir "klick" gemacht.

        Hallo Dark Guardian,

        dein Beispiel ergänzt das Ganze nochmal. Es ist wirklich nicht all zu schwierig.

        Dankeschön.


        LG
        caipiranha
        [SIZE="1"][FONT="Arial"]Mit kleinen Schritten vorwärts. :) [/FONT][/SIZE]

        Kommentar

        Lädt...
        X