ugrás a tartalomhoz

Switch case OR operátorral kombinálva?

Anonymous · 2006. Május. 6. (Szo), 19.03
switch ("e") {
	case "a" OR "b" OR "c" OR "d":
		echo "A";
	break;
}
Miért íródik ki az, hogy 'A'?
 
1

Switch gond

Anonymous · 2006. Május. 6. (Szo), 19.45
Mire alapozod ezt a fajta egyedi "switch" szintaxist? :)
Olvasgasd a manuált:
http://hu2.php.net/manual/hu/control-structures.switch.php

Gyulus
4

nem "egyedi"

Hodicska Gergely · 2006. Május. 7. (V), 09.53
Mire alapozod ezt a fajta egyedi "switch" szintaxist? :)

Nem az "egyedisége a gond, hisz pont az Általad idezett oldalon is ez van:
"A case kifejezés tetszőleges kifejezés, aminek egyszerű a típusa, vagyis egész vagy lebegőpontos szám, vagy string."


Felhő
5

nem "egyedi"

Anonymous · 2006. Május. 8. (H), 00.31
Jó, jó, de ez a formula akkor is ellentmond a switch általános használatának.
Viszont egy ilyet jól lehet használni:
switch (true) {
   case (érték==másikérték):
   // valami
   break;
}
Gyulus
2

Megoldás

Anonymous · 2006. Május. 6. (Szo), 20.11
Szerintem te ezt akartad összehozni:
switch ("e") {
    case "a":
    case "b":
    case "c":
    case "d":
        echo "A";
    break;
}
3

Amiért kiírja...

Anonymous · 2006. Május. 6. (Szo), 21.20
Az "a" OR "b" OR "c" OR "d" kifejezés értéke TRUE, mivel az OR egy logikai operátor, tehát a php automatikus típurkonverziója miatt az "e" logikai értéke is TRUE lesz, ami megegyezik bármely string (nem nullstring) logikai értékével.
7

Részletezném :)

fchris82 · 2006. Május. 8. (H), 22.28
Az "a" OR "b" OR "c" OR "d" kifejezés értéke TRUE, mivel az OR egy logikai operátor, tehát a php automatikus típurkonverziója miatt az "e" logikai értéke is TRUE lesz, ami megegyezik bármely string (nem nullstring) logikai értékével.


Amit te írtál, az ennek felel meg:

if( "a" OR "b" OR "c" OR "d" ) {
  // utasítások
}
NEM PEDIG ENNEK:

if( "e"=="a" OR "e"=="b" OR "e"=="c" OR "e"=="d" ) {
  // utasítások
}
Egyébként meg úgy szokták ezt írni, hogy (már írták korábban is):

switch( "e" ) {
  case "a":
  case "b":
  case "c":
  case "d": echo "A";
            break;
  default: //minden egyéb esetben
}
Ha nincs a case "végén" egy break, akkor automatikusan halad tovább a switchen belül a progi, amíg nem talál egy break-et. Tehát a fenti kódot lenne érdemes használni, átláthatóbb is és ugyan azt csinálja, mint ha teleraktad volna "OR"-ral :))
8

echo 'A'

Anonymous · 2006. Május. 9. (K), 09.44
A fenti swich utasítás ennek felel meg:

switch ("e") {
case true : echo "A";
break;
}

Azaz az automatikus típuskonverzió után ez lesz belőle:

switch ( true ) {
case true : echo "A";
break;
}

Ehelyett elég simán ennyit írni: echo 'A';
6

Defaulttal...

ozoli · 2006. Május. 8. (H), 09.48
Sztem hiányzik a default, rész és ezért ugrik az A-ra. Bár igazából nem így kellene de sok érdekes dolgot láttam már....