meine erste Funktion
Mona
- php
Guten Morgen!
Ich habe meine erste Funktion geschrieben, aber irgendwas funktioniert damit nicht. Wenn ich diese benutze, steht der Wert bei Anzeige der Internetseite im Browser immer an anderer Stelle des HTML Codes, als er eigentlich sollte. Ich kanns nicht nachvollziehen.
function DifWandler($Dif) {
switch($Dif) {
case 1:
echo "Haus";
break;
case 2:
echo "Motor";
break;
case 3:
echo "Laptop";
break;
case 4:
echo "Kamera";
break;
case 5:
echo "Bildschirm";
break;
default:
echo "ohne";
}
}
echo DifWandler($_GET['dif']);
Hier habe ich mit Sicherheit einen ganz blöden Fehler in der Funktion.
Würde mich freuen, wenn mir jemand diesen zeigen könnte.
Grüße
Hier habe ich mit Sicherheit einen ganz blöden Fehler in der Funktion.
Darf ich fragen, wie du zu diesem Schluss kommst?
Würde mich freuen, wenn mir jemand diesen zeigen könnte.
Imho gibts da nichts zum Zeigen.
Eigentlich return anstatt echo. Also so sollte es sein:
function DifWandler($Dif) {
switch($Dif) {
case 1:
return "Haus";
break;
case 2:
return "Motor";
break;
case 3:
return "Laptop";
break;
case 4:
return "Kamera";
break;
case 5:
return "Bildschirm";
break;
default:
return "ohne";
}
}
echo DifWandler($_GET['dif']);
Eigentlich return anstatt echo. Also so sollte es sein:
Das ändert nichts an der Tatsache, dass es nicht nachvollziehbar ist, warum die Ausgabe immer an einer andere Stelle steht.
Die Funktion hat keinen Rückgabewert, also liefert der eigentliche Aufruf nichts zurück - das ist zwar etwas unschön, macht aber nix - die echos in der Funktion werden dennoch ausgeführt - wenn das Script sich nicht ändert, immer an derselben Stelle.
Genau das ist der Grund. Ich dachte Mona wollte schnell ein Ergebnis haben ;-)
Eigentlich return anstatt echo. Also so sollte es sein:
Hallo,
warum auch immer, die Ausgabe ist nun mit return statt echo an der richtigen Stelle.
Weiß der Kuckuck, warum...
Danke!
Hi,
warum auch immer, die Ausgabe ist nun mit return statt echo an der richtigen Stelle.
Weiß der Kuckuck, warum...
Ja, der Kuckuck weiss, dass die von dir vorher in deiner Funktion per echo gemachten Ausgaben natürlich sofort "rausgefeuert" wurden.
*Ausgaben* per echo, print, etc. erscheinen normalerweise immer an der "Stelle", an der sie ausgeführt werden - also bei dir zu dem Zeitpunkt, wo du deine Funktion aufrufst.
Deshalb gilt die Faustregel, dass Funktionen keine direkten Ausgaben machen, sondern Rückgabewerte liefern sollten. Diese lassen sich dann an der aufrufenden Stelle in Empfang nehmen, und später weiter verarbeiten, bzw. auch ausgeben.
MfG ChrisB
*Ausgaben* per echo, print, etc. erscheinen normalerweise immer an der "Stelle", an der sie ausgeführt werden - also bei dir zu dem Zeitpunkt, wo du deine Funktion aufrufst.
Deshalb gilt die Faustregel, dass Funktionen keine direkten Ausgaben machen, sondern Rückgabewerte liefern sollten. Diese lassen sich dann an der aufrufenden Stelle in Empfang nehmen, und später weiter verarbeiten, bzw. auch ausgeben.
Wenn niemand irgendwas daran ändert, müsste das Echo die Ausgabe aber immer an derselben Stelle rausfeuern. Warum die Ausgabe vorher jedes Mal an einer anderen Stelle war ist dennoch nicht nachvollziehbar.
Hi,
Wenn niemand irgendwas daran ändert, müsste das Echo die Ausgabe aber immer an derselben Stelle rausfeuern.
Tat es wohl auch.
Warum die Ausgabe vorher jedes Mal an einer anderen Stelle war ist dennoch nicht nachvollziehbar.
War wohl nicht der Fall:
[...] immer an anderer Stelle des HTML Codes, als er eigentlich sollte
Wenn du den letzten Teil nicht unterschlägst, dann ist wohl immer die selbe Stelle gemeint, nur die "falsche".
MfG ChrisB
Wenn du den letzten Teil nicht unterschlägst, dann ist wohl immer die selbe Stelle gemeint, nur die "falsche".
Ich hab das anders verstanden - danke für die Aufklärung.
Hello,
Wenn niemand irgendwas daran ändert, müsste das Echo die Ausgabe aber immer an derselben Stelle rausfeuern. Warum die Ausgabe vorher jedes Mal an einer anderen Stelle war ist dennoch nicht nachvollziehbar.
Weil das HTML durch eine solche unmotivierte Ausgabe irgendwie kaputt ist?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
case 1:
return "Haus";
break;
durch 'return' wird die Funktion verlassen, nachfolgender Code wird also nicht mehr ausgeführt. Dieses 'break' erfüllt somit keinen Zweck und kann ersatzlos gestrichen werden.
Cheatah
durch 'return' wird die Funktion verlassen, nachfolgender Code wird also nicht mehr ausgeführt. Dieses 'break' erfüllt somit keinen Zweck und kann ersatzlos gestrichen werden.
Danke für den Hinweis!
Hello,
Ich habe meine erste Funktion geschrieben, aber irgendwas funktioniert damit nicht. Wenn ich diese benutze, steht der Wert bei Anzeige der Internetseite im Browser immer an anderer Stelle des HTML Codes, als er eigentlich sollte. Ich kanns nicht nachvollziehen.
Wenn es eine gut geschriebene Funktion sein soll, die den Regeln der strukturierten Programmierung genügt, dann sollte sie selber überhaupt nichts auf die Standardausgabe ausgeben, sondern einen Rückgabewert liefern. Also müssen die Echos verschwinden. Den Rückgabewert soll man dann (den Regeln nach) an genau einer Stelle zurückgeben.
function DifWandler($Dif)
{
$result = false;
switch($Dif)
{
case 1:
$result = "Haus";
break;
case 2:
$result = "Motor";
break;
case 3:
$result = "Laptop";
break;
case 4:
$result = "Kamera";
break;
case 5:
$result = "Bildschirm";
break;
default:
$result = "ohne";
}
return $result;
}
echo htmlspecialchars(DifWandler($_GET['dif']));
So könnte man für die Funktion auch ein sauberes Nassi-Shniderman-Diagramm zeichen. Sie hat einen Eingang und einen Ausgang. Der Rückgabewert wird vorinitialisiert, für den Fall, dass im Funktionskörper etwas schief geht. Das ist hier bei der übersichtlichen Funktion nicht zu erwarten, wäre aber bei einer mehrere Seiten langen Funktion nichts Ungewöhnliches.
Auf die breaks zu verzichten, weil man stattdessen returns in den Programmablauf einbaut, ist keine gute Idee. Wenn Du dann irgendwo etwas änderst, das return vielleicht gegen mehrere Zeilen Code austauscht, dann hast Du plötzlich (wieder) ungewöhliche Verhaltensweisen und weißt nicht woher die kommen. Schmuddelprogrammierung kann man anfangen, wenn man gut genug ist und bis dahin hat man sich die hoffentlich auch abgewöhnt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg

--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>