call-by-value?! call-by-reference

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

  • call-by-value?! call-by-reference

    Hallo,
    ich bin Php-einsteiger und lerne gerade aus einem (meiner Meinung nach gutem) Buch (Einstieg in PHP5 - Thomas Theis).
    Hier ist aber ein Beispiel, bei dem Ich einfach nicht durchsteige.

    Hier der Code:
    PHP-Code:
    <html>
    <head>
    <?php

       
    function vtauschen($a$b)
       {
          
    $temp $a;
          
    $a $b;
          
    $b $temp;
       }

       function 
    rtauschen(&$a, &$b)
       {
          
    $temp $a;
          
    $a $b;
          
    $b $temp;
       }

    ?>
    </head>
    <body>
    <?php
       $x 
    12;   $y 18;
       echo 
    "Methode 1, vorher: $x$y <br>";
       
    vtauschen($x,$y);
       echo 
    "Methode 1, nachher: $x$y <p>";

       
    $x 12;   $y 18;
       echo 
    "Methode 2, vorher: $x$y <br>";
       
    rtauschen($x,$y);
       echo 
    "Methode 2, nachher: $x$y <p>";

       
    $x 12;   $y 18;
       echo 
    "Methode 3, vorher: $x$y <br>";
       
    vtauschen(&$x,&$y);
       echo 
    "Methode 3, nachher: $x$y <p>";
    ?>
    </body>
    </html>
    Hier die Ausgabe im Browser:
    PHP-Code:
    Methode 1vorher1218
    Methode 1
    nachher1218

    Methode 2
    vorher1218
    Methode 2
    nachher1812

    Methode 3
    vorher1218
    Methode 3
    nachher1812 
    Es geht um Variablen tausch, aber was passiert da genau?
    Ich will jetzt nich die ganze Erklärung schreiben die im Buch steht.
    Könnte mir vielleicht jemand den Vorgang erläutern?

  • #2
    Es geht wie in Deinem Titel beschrieben um call by reference und call by value,
    wenn Du eine Variable an eine Funktion per value übergibst verarbeitet die Funktion den Wert nicht die Variable gibst Du sie per reference wird die variablenreferenz verarbeitet

    also in Deinem Beispiel:
    Hier wurde nur in der Funktion gerechnet nichts ist verändert
    Methode 1, vorher: 12, 18
    Methode 1, nachher: 12, 18

    guckst Du bei reference hat das ergebnis ausserhalb der Funktion Bestand
    Methode 2, vorher: 12, 18
    Methode 2, nachher: 18, 12

    Methode 3, vorher: 12, 18
    Methode 3, nachher: 18, 12
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Danke erst mal.
      Jetzt hab ich es verstanden, ist ja ganz simpel!

      Aber der Unterschied zwischen Methode 2 und 3 ist mir noch nicht ganz klar.

      Kommentar


      • #4
        Original geschrieben von derwebling
        Aber der Unterschied zwischen Methode 2 und 3 ist mir noch nicht ganz klar.
        schalt mal error_reporting auf EALL, dann haut er dir Methode 3 um die Ohren, weil sie veraltet ist
        TBT

        Die zwei wichtigsten Regeln für eine berufliche Karriere:
        1. Verrate niemals alles was du weißt!


        PHP 2 AllPatrizier II Browsergame

        Kommentar


        • #5
          Danke schön!

          Kommentar


          • #6
            in vielen faellen funktioniert ein "call-time pass by reference" schon gar nicht mehr, da es in der php.ini verboten ist.
            einer funktion sollte von vornherein bewusst sein, ob sie ihre variablen per referenz oder wert bekommt.

            kleiner tip am rande: in php5 werden objekte _immer_ per referenz uebergeben.
            1101100 1101001 1100110 1100101 1101001 1110011 1100001 1100010 1101001 1110100 1100011 1101000

            /(bb|[^b]{2})/

            Kommentar

            Lädt...
            X