PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

23-03-2005, 23:46
|
derwebling
Newbie
|
|
Registriert seit: Mar 2005
Ort: Bayern
Beiträge: 9
|
|
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 1, vorher: 12, 18
Methode 1, nachher: 12, 18
Methode 2, vorher: 12, 18
Methode 2, nachher: 18, 12
Methode 3, vorher: 12, 18
Methode 3, nachher: 18, 12
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?
|

24-03-2005, 00:02
|
MelloPie
PHP Master
|
|
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
|
|
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
|

24-03-2005, 00:15
|
derwebling
Newbie
|
|
Registriert seit: Mar 2005
Ort: Bayern
Beiträge: 9
|
|
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.
|

24-03-2005, 00:24
|
TBT
 Moderator
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
|
|
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
|

24-03-2005, 00:53
|
derwebling
Newbie
|
|
Registriert seit: Mar 2005
Ort: Bayern
Beiträge: 9
|
|
Danke schön!
|

24-03-2005, 08:57
|
loci
Junior Member
|
|
Registriert seit: Feb 2003
Ort: Saarland
Beiträge: 82
|
|
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.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|