PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   call-by-value?! call-by-reference (https://www.php-resource.de/forum/php-developer-forum/52283-call-by-value-call-by-reference.html)

derwebling 23-03-2005 22:46

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?

MelloPie 23-03-2005 23:02

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

derwebling 23-03-2005 23:15

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.

TBT 23-03-2005 23:24

Zitat:

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 ;)

derwebling 23-03-2005 23:53

Danke schön!

loci 24-03-2005 07:57

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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:22 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG