switch und continue
Marco
- php
Hallo zusammen,
ich habe folgenden Quellcode, welcher merkwürdigerweise zu keiner Ausgabe führt:
<?php
$var = 2;
switch(true)
{
case ($var == 1):
echo '1';
break;
case ($var == 2):
$var = 5; continue;
case ($var == 3):
break;
case ($var == 4):
echo '4';
break;
default:
echo 'default';
break;
}
?>
Auch wenn man beim 2. Fall das $var = 5; in $var = 1 oder 4 umändert, gibt es keine Ausgabe. Ich habe wirklich keine Ahnung woran das liegt.
Mit switch ($var) und dann bei den Fällen nur die Zahl habe ich es auch schon getestet, geht aber genauso wenig.
Kann das an meiner PHP-Version(5.0.2) liegen?
Vielen Dank im Vorraus
Marco
Ich habe eben auch nocheinmal an das Ende des Skripts die Variable $var mit echo ausgeben lassen und sie hat den Wert 5, bloß die "default"-Anweisung wird nie ausgeführt.
Ich habe das ganze eben auch nocheinmal auf einem anderen Server mit PHP 4.3.2 getestet, geht dort aber auch nicht.
Marco
Hallo,
Du solltest Dir vielleicht nochmal die genaue Def. der Funktion 'switch' durchlesen.
Hier würde ich dir eher zu 'ner Reihe von if-Anweisungen raten.
mfg dolito
Und wie kann man dann bei if-Anweisungen wieder hochspringen? Das war ja gerade das, was ich wollte. Ich bin schon bei case 2:, aber da stellt das Skript fest, dass es 1 doch noch ausführen muss. Deshalb wollte ich einfach die Variable ändern und dann durch continue nochmal von oben aus alles prüfen lassen, aber es geht irgendwie überhaupt nicht.
Ich habe jetzt das Problem jetzt eh anders gelöst, mich würde aber trotzdem interessieren, warum continue hier nicht ordnungsgemäß funktioniert.
Marco
Und wie kann man dann bei if-Anweisungen wieder hochspringen? Das war ja gerade das, was ich wollte. Ich bin schon bei case 2:, aber da stellt das Skript fest, dass es 1 doch noch ausführen muss. Deshalb wollte ich einfach die Variable ändern und dann durch continue nochmal von oben aus alles prüfen lassen, aber es geht irgendwie überhaupt nicht.
<?php
if ($var==1)
$step = 1;
elseif ($var==2)
$step = 2;
elseif ($var==3 || $var==4)
$step = 3;
else $step = 2;
if ($step == 1)
{
...
}
elseif ($step == 2)
{
...
}
usw.
Ich habe jetzt das Problem jetzt eh anders gelöst, mich würde aber trotzdem interessieren, warum continue hier nicht ordnungsgemäß funktioniert.
Bedenke 'switch' ist keine Schleife!!! sondern eine 'Entscheidungshilfe'(ich 'nen es mal so )
Die bedingungen werden nach und nach abgeklappert, wenn eine zutrifft, wird der gesamte code darunter ausgeführt.
Abbrechen kann man das mit break.
Und aus, mehr gibt's nicht.
Bitte berichtigen, falls auf dem Holzweg.
Wie hast Du es denn gelöst?
mfg dolito
Hi,
Die bedingungen werden nach und nach abgeklappert, wenn eine zutrifft, wird der gesamte code darunter ausgeführt.
Abbrechen kann man das mit break.
Und aus, mehr gibt's nicht.
In PHP schon, wie ich vorhin beim nachgucken im Manual gesehen hab - ich dachte auch, daß continue im switch nichts zu suchen hat.
Aber PHP sieht das anders.
cu,
Andreas
Bedenke 'switch' ist keine Schleife!!! sondern eine 'Entscheidungshilfe'(ich 'nen es mal so )
Die bedingungen werden nach und nach abgeklappert, wenn eine zutrifft, wird der gesamte code darunter ausgeführt.
Abbrechen kann man das mit break.
Und aus, mehr gibt's nicht.
In der PHP-Dokumentation steht bei switch folgendes:
Anmerkung: Beachten Sie bitte, dass im Unterschied zu anderen Programmiersprachen die continue Anweisung auch bei switch ihre Gültigkeit hat und ähnlich wie break funktioniert. Falls Sie switch innerhalb einer Schleife verwenden und mit dem nächsten Durchlauf der äußeren Schleife beginnen möchten, verwenden Sie continue 2.
Bitte berichtigen, falls auf dem Holzweg.
Wie hast Du es denn gelöst?
Ich habe jetzt eine Schleife um die switch-Anweisung gepackt. So kann ich immer die switch-Anweisung nochmal mit "continue 2;" die switch-Abfrage nochmal ablaufen lassen. Die Schleife ist eigentlich eine unendliche Schleife, wird jedoch durch ein break unter der switch-Anweisung beendet. Ich weiß, dass es nicht so schön ist, klappt aber bestens. Ich habe auch schon an eine rekursive Funktion gedacht, aber da müsste ich dann alle Variablen übergeben oder global machen und das ist zu viel Arbeit. Deshalb habe ich es jetzt so gelöst.
Mich wundert aber wirklich, dass in der Dokumentation nicht steht, dass das continue nicht so richtig funktioniert oder dass es niemand anderes mal ausprobiert hat, es steht nämlich nichts in den Benutzerkommentaren.
Marco
mfg dolito
In der PHP-Dokumentation steht bei switch folgendes:
Anmerkung: Beachten Sie bitte, dass im Unterschied zu anderen Programmiersprachen die continue Anweisung auch bei switch ihre Gültigkeit hat und ähnlich wie break funktioniert. Falls Sie switch innerhalb einer Schleife verwenden und mit dem nächsten Durchlauf der äußeren Schleife beginnen möchten, verwenden Sie continue 2.
Genau so hast Du es ja jetzt gemacht.
Mich wundert aber wirklich, dass in der Dokumentation nicht steht, dass das continue nicht so richtig funktioniert oder dass es niemand anderes mal ausprobiert hat, es steht nämlich nichts in den Benutzerkommentaren.
Dann schreib doch was dazu, wenn Du denkst es bringt andere weiter.
Dafür sind sie doch da.
mfg dolito
Hallo,
ich denke so kommt es zur gewünschten Ausgabe.
<?php
$var = 2;
switch($var)
{
case ($var == 1):
echo '1';
break;
case ($var == 2):
$var = 5; continue;
case ($var == 3):
break;
case ($var == 4):
echo '4';
break;
default:
echo 'default';
break;
}
echo $var;
?>