Einfache Funktion klappt nicht
Löti
- php
Hi,
warum wird hier nicht das Ergebnis ausgegeben?
Mache ich nen Denkfehler?
<?php
function add($param1,$param2)
{
$summe=$param1+$param2;
return $summe;
}
add(12,3);
echo $summe;
?>
Danke, Löti
Hi,
du hast einen Irrglauben bzgl. der Variablengültigkeit (nähere siehe Handbuch)
function add($param1,$param2)
{
$summe=$param1+$param2;
Jetzt hast du _innerhalb_ der Funktion die Variable $summe zur Verfügung
return $summe;
...hier gibst du sie als Rückgabewert raus
}
$summe ist jetzt ungültig
add(12,3);
Du rufst die Funktion auf und _verwirfst_ ihren Rückgabewert
echo $summe;
Diese Variable existiert nicht
-> Funktioniere würde z.B.
echo add(12,3);
MfG
Rouven
Hi,
du hast einen Irrglauben bzgl. der Variablengültigkeit (nähere siehe Handbuch)
function add($param1,$param2)
{
$summe=$param1+$param2;
Jetzt hast du _innerhalb_ der Funktion die Variable $summe zur Verfügung
return $summe;
...hier gibst du sie als Rückgabewert raus
...und wo geht sie hin?
Kannic sie mit global über die Funktion hinaus als gültig erklärt werden?
Danke erstmal für den Hinweis, Löti
}
$summe ist jetzt ungültigadd(12,3);
Du rufst die Funktion auf und _verwirfst_ ihren Rückgabewert
echo $summe;
Diese Variable existiert nicht-> Funktioniere würde z.B.
echo add(12,3);MfG
Rouven
<?php
function add($param1,$param2)
{
$summe=$param1+$param2;
return $summe;
}
$summe=add(12,3);
echo $summe;
?>
Klar, mit echo add gings noch leichter, aber diese kleine Funktion steht ja stellvertretend für die eigentlich nciht funktionierende (die jetzt auch funtzt ;-) )
Danke, Löti
Hi,
zunächst mal, siehe Handbuch: Variable scope.
Dort siehst du, dass du mit global _zunächst mal_ das Gegenteil erreichst: Du kannst eine Variable deren Gültigkeit _außerhalb_ der Funktion ist in die Funktion _hinein_ transportieren.
Aber ja, im Endeffekt kannst du diesen Effekt so erzeugen:
$summe = 0;
function add($a, $b) {
global $summe;
$summe = $a+$b;
}
add(12,3);
echo $summe;
Das ist allerdings unglücklich bzw. schlechter Stil:
Schöner wäre
$a = 12;
$b = 3;
echo "Das Ergebnis von $a + $b ist ".add($a, $b);
Was würdest du, wenn du diesen Code _liest_ erwarten? Das 2 rauskommt. Was kommt raus? 4...
MfG
Rouven
Beispiel:
$summe = 0;
add(1,1);
add($summe,2);
echo $summe;Was würdest du, wenn du diesen Code _liest_ erwarten? Das 2 rauskommt. Was kommt raus? 4...
Perfekt!
Hast mich genau richtig auf dem falschen Fuß erwischt :-)
Ich hätte 2 gesagt, aber es stimmt. $Summe war ja bereits überschrieben ud hatte den Wert "2", bevor sie zum 2. Mal benutzt wurde.
Wenn jetzt da 50 Zeilen Scriptcode zwischen sind...böse Falle ;-)
Was hältst Du von meiner Lösung unter "So gehts"?
Grüße, Löti
MfG
Rouven
Hi,
Was hältst Du von meiner Lösung unter "So gehts"?
Im Prinzip ist das ja eine Variante der Direktausgabe, die lediglich das Ergebnis kurz zwischenspeichert.
MfG
Rouven
Hi,
Was hältst Du von meiner Lösung unter "So gehts"?
Im Prinzip ist das ja eine Variante der Direktausgabe, die lediglich das Ergebnis kurz zwischenspeichert.MfG
Rouven
Ja, in diesem kurzen Beispiel stimmts.
Im Original wird mit dem Zwischenergebnis noch etwas gearbeitet, eh es ausgegeben wird. Daher ist die Zwischenspeicherung nötig.
Danke für die schnelle Hilfe
Löti
Hello,
Das ist allerdings unglücklich bzw. schlechter Stil:
- Eine Funktion verfügt über eine Rückgabemöglichkeit - nutze sie! Dadurch kannst du sie nämlich in Ausgaben einbauen.
und Du kannst die Funktionen schachteln. Das ist viel wesentlicher. Bei PHP bezieht sich das aber leider nur auf die _Benutzung_ der Funktion und leider nicht auf die Definition.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom