ugrás a tartalomhoz

Switch case OR operátorral kombinálva?

Anonymous · 2006. Május. 6. (Szo), 19.03
  1. switch ("e") {  
  2.     case "a" OR "b" OR "c" OR "d":  
  3.         echo "A";  
  4.     break;  
  5. }  
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:
  1. switch (true) {  
  2.    case (érték==másikérték):  
  3.    // valami  
  4.    break;  
  5. }  
Gyulus
2

Megoldás

Anonymous · 2006. Május. 6. (Szo), 20.11
Szerintem te ezt akartad összehozni:
  1. switch ("e") {  
  2.     case "a":  
  3.     case "b":  
  4.     case "c":  
  5.     case "d":  
  6.         echo "A";  
  7.     break;  
  8. }  
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:
  1. if"a" OR "b" OR "c" OR "d" ) {  
  2.   // utasítások  
  3. }  
NEM PEDIG ENNEK:
  1. if"e"=="a" OR "e"=="b" OR "e"=="c" OR "e"=="d" ) {  
  2.   // utasítások  
  3. }  
Egyébként meg úgy szokták ezt írni, hogy (már írták korábban is):
  1. switch"e" ) {  
  2.   case "a":  
  3.   case "b":  
  4.   case "c":  
  5.   case "d"echo "A";  
  6.             break;  
  7.   default//minden egyéb esetben  
  8. }  
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....