dedlfix: Geltungsbereich von Variablen, Bsp. Frage

Beitrag lesen

echo $begrüßung;

Summe() hat die Aufgabe den Inhalt der Variable $b zu ändern. Du brauchst Summe() nicht, um $b auszugeben.

Ich widerspreche dir mal mit einem Bild und fokusiere nochmal auf das Bsp. vom PHP Handbuch.

Deine Frage lautete

Ich verstehe nicht, warum ich Summe(); brauche für echo $b; ?

echo $b; gibt den Wert von $b aus. Summe() wird für diese Ausgabe nicht benötigt. Summe() wird benötigt, um den Wert von $b vorher zu berechnen. Das ist ein Unterschied. Du wirst ihn möglicherweise krümelkackerisch finden, aber das stört mich nicht. Programmieren ist für mich eine Tätigkeit bei der es auf Exaktheit ankommt.

Ich hab das Beispiel 12-1: http://www.php.net/manual/de/language.variables.scope.php erweitert.

Es wäre besser gewesen, wenn du den Code per Copy&Paste hier als Text eingefügt hättest. Teile einer  Grafik lassen sich so schwer zitieren.

Du verschachtelst Funktionsdeklarationen. Dies ist unter PHP nicht sinnvoll, da Funktionen immer global abgelegt werden. Außerdem erfolgt die Deklaration von Summe2() erst, wenn Summe() ausgeführt wird. Dies wird dann aber jedes Mal versucht. Somit muss Summe() einmal aufgerufen worden sein, bevor Summe2() benutzt werden kann. Du kannst aber Summe() kein zweites Mal aufrufen, ohne dass dein Script mit einem Fatal Error abgebrochen wird, weil Summe2() bereits existiert.

Wie ich auch bereits sagte, ist es besser, wenn eine Funktion Parameter entgegennimmt und daraus ein Ergebnis berechnet anstatt Variablen aus anderen Geltungsbereichen zu verändern.

function Summe($summand1, $summand2) {  
  return $summand1 + $summand2;  
}

Aufrufen kann man diese Funktion dann so:

echo Summe(1, 1);  
  
$a = 1;  
$b = 2;  
$c = Summe($a, $b);  
echo $c;

usw.usf.

Wenn ich //Summe2(); auskommentiere bekomme ich bei $c nicht 7. Wie bekomme ich 7 OHNE Summe2()?:

Auf viele Arten. Meist ist ja nicht das Ergebnis bekannt sondern die Eingangsparameter. Wie also lauten deine Eingangsparameter, bzw. wie lautet die Aufgabenstellung?

echo "$verabschiedung $name";