switch meint "{" == "$"

SAK

Grünschnabel
Hallo Leute,

mir ist beim Programmieren etwas aufgefallen, was ich nicht ganz verstehe.
Ich habe zum testen mal ein test code erstellt.
PHP:
<?php

$text	= "  {  \$ds   }";
for ($i=0; $i<strlen($text); $i++)
{
	switch ($text[$i])
	{
		case "}":
			echo "$i\t } entspricht $text[$i]\n";
		case "{":
			echo "$i\t { entspricht $text[$i]\n";
		case "$":
			echo "$i\t \$ entspricht $text[$i]\n";
	}
}

?>
Dieser Code bringt als ergebnis folgendes:
Code:
2        { entspricht {
2        $ entspricht {
5        $ entspricht $
11       } entspricht }
11       { entspricht }
11       $ entspricht }

Ist das jetzt ein Fehler, kann switch keine Zeichen vergleichen oder habe ich irgendwo etwas falsch gemacht?
Hoffe jemand weis besser bescheid.
 
es fehlen die breaks, so das er immer alle weitern nach unten hin auch durchläuft.

PHP:
    switch ($text[$i])
    {
        case "}":
            echo "$i\t } entspricht $text[$i]\n";
break;
        case "{":
            echo "$i\t { entspricht $text[$i]\n";
break;
        case "$":
            echo "$i\t \$ entspricht $text[$i]\n";
break;
    }
 
Wieso führt der case seinen Code aus auch wenn es nicht mit dem teil zusammen passt.
So wie ich es verstanden habe, wird wenn kein break vorhanden ist und ein ein case ergibt TRUE, wird jeder nachfolgende case auch ausgeführt.
Hab ich es richtig verstanden?
 
Nein, Switch() fängt oben an zu vergleichen, sobald es den ersten Match findet, führt es allen folgenden Quellcode aus... weiter case 'xyz' Zeilen werden übersprungen... er führt solange alle befehle aus bis er an ein break; oder das ende des Switch kommt. In den meisten Fällen kommt über jedes weitere case eben ein break;

Gern nutzt man dieses doppelte ausführen um doppelte bedeutungen abzufragen wie:

PHP:
Switch($string){
   case 'Str':
      $string = 'Straße';
   case 'Straße':
     echo 'blubber';
      // und in die Datenbank oder sonst was mit machen...
      break;
   default:
      echo 'kein match';
}
 
Zurück