Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
switch - continue funktioniert nicht wie erwartet [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
switch - continue funktioniert nicht wie erwartet


 
crazyPower
04-10-2005, 12:48 
 
Hallo,

ich habe folgendes Problem: Ich will innerhalb eines Switch-Case-Konstruktes die Switchvariable ändern, und dann in der Verzweigung fortfahren. Leider klappt das so nicht:

$d='s';

switch ($d){
case 's':
echo "das s";
if (1==1){
$d='b';
continue;
}
break;

case 'b':
echo "das b";
break;
}

wobei die 1==1 Verzweigung in meinem richtigen Skript eine richtige Verzweigung darstellt...


Also eigentlich erwarte ich als Ergebnis:

das s
das b


Tatsächlich erhalte ich nur
das s

Kann es sein, das der PHP-Interpreter die Switchvariable irgendwo temporär zwischenspeichert, und deshalb diese Änderung der Variablen keinen Einfluß hat?

cu

cP

 
TobiaZ
04-10-2005, 12:51 
 
afaik erfolgt die entscheidung welcher Fall eintritt ganz am Anfang, nämlich beim switch(). Du veränderst die variable später.

 
crazyPower
04-10-2005, 12:57 
 
Hallo,

ja, aber sollte er mit "continue" nicht wieder bei switch($d)... beginnen?


cu

cP

 
wahsaga
04-10-2005, 13:08 
 
Original geschrieben von crazyPower
ja, aber sollte er mit "continue" nicht wieder bei switch($d)... beginnen?
Nein, wieso?

switch ist keine Schleife.

 
prego
04-10-2005, 13:08 
 
Switch ist keine Schleife.


continue
continue wird innerhalb von Schleifen verwendet. Die Schleife wird an der aktuellen Stelle abgebrochen und es wird der nächste Durchlauf begonnen.

aus: http://de.php.net/manual/de/control-structures.continue.php

misst, zu spät ;)

 
crazyPower
04-10-2005, 13:27 
 
Hallo,

danke für die Hinweis. Aber die Deutung in die Reichtung, das es funktionieren müsste sei mir Aufgrund dieses Satzes gestattet ;)

Die switch-Anweisung ist gleichbedeutend einer Reihe von if-Anweisungen mit dem gleichen Parameter.

Siehe :
http://de.php.net/manual/de/control-structures.switch.php

Wenn ich in einer If-Verzweigung die Vergleichsvariable ändere, wird das berücksichtigt. Beim Switch anscheinend nicht...

cu

cP

 
hhcm
04-10-2005, 14:54 
 
Bei einem If kannst du allerdings ein else benutzen um das gegenteil zum tragen zu bringen.

Bei Switch benutzt du die übergebene Variable einmal um einen Fall festzulegen und dementsprechend zu handeln.

Wenn du in deinem Code nur einen Fall prüfen und dementsprechend den Inhalt deine Var setzen willst dann sollte fogendes genauso gut funktionieren.


$d = (1==1) ? "s" : "b";


Ansonsten solltest du mal dein Vorhaben und den dazugehörigen Code Posten, dann wird dir bestimmt geholfen.

 
crazyPower
04-10-2005, 15:07 
 
Es ging mir mehr ums Prinzip.

Nachdem klar war das es so nicht geht, hab ich das Problem mittels if-Verzweigungen gelöst!

Sieht zwar nicht so schön aus, funktioniert aber...

cu

cP

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:06 Uhr.