Podivně fungující switch – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Podivně fungující switch – PHP – Fórum – Programujte.comPodivně fungující switch – PHP – Fórum – Programujte.com

 

spider-x
~ Anonymní uživatel
11 příspěvků
18. 10. 2014   #1
-
0
-

Ahoj. Nevím proč, ale tenhle kód vůbec nefunguje tak jak bych si představoval. Když napíšu, že $i=0 tak program vypíše "i je větší než 0 a zároveň menší než 2" . Při $i=1 to funguje správně, Při zadání $i=2 program vypíše "i je rovno 0 nebo 1" Kde by mohl být prosímvás problém? 

<?php
$i = 2;
switch ($i) :
	case ($i>0 && $i <2): 
		print "i je větší než 0 a zároveň menší než 2"; break;
	case (0 || 1): 
		print "i je rovno 0 nebo 1"; break;
	case 2:
		print "i je rovno 2"; break;

endswitch;
?>
Nahlásit jako SPAM
IP: 77.95.45.–
Kit+15
Guru
18. 10. 2014   #2
-
0
-

#1 spider-x
Takhle switch nefunguje, pro tento účel se mnohem lépe hodí klasický if. Třeba takto:

<?php
function intervaly($i) {
    if ($i>0 && $i <2) 
        return "i je větší než 0 a zároveň menší než 2"; 
    if ($i == 0 || $i == 1) 
        return "i je rovno 0 nebo 1";
    if ($i == 2)
        return "i je rovno 2"; 
}

$i = 2;
print intervaly($i);

Vlastně máš správně jen řádek "case 2:"

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
spider-x
~ Anonymní uživatel
11 příspěvků
18. 10. 2014   #3
-
0
-

Tak díky za vysvětlení :-) Tenhle kód jsem našel v knize z roku 2005. Tak to asi byla nějáká stará verze PHP.

Nahlásit jako SPAM
IP: 77.95.45.–
Kit+15
Guru
18. 10. 2014   #4
-
0
-

#3 spider-x
Zkus se podívat pořádně do textu kolem toho příkladu. Určitě je tam napsáno, že tento switch sice bude fungovat, ale bude se chovat podivně a že se takto nemá používat.

Co je to za knihu? Na které stránce?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
spider-x
~ Anonymní uživatel
11 příspěvků
18. 10. 2014   #5
-
0
-
Nahlásit jako SPAM
IP: 77.95.45.–
Kit+15
Guru
18. 10. 2014   #6
-
0
-

#5 spider-x
Problém je v tom, že v této podobě to skoro nikdo nepoužívá. Když takový program někomu ukážeš, tak na to bude čumět. Máš vůbec tušení, jak se vyhodnotí výraz v závorce? 

case ($i>0 && $i <2):

Vyhodnotí se totiž jinak, než bys čekal. Výsledek je true nebo false, což je reprezentováno 1 nebo 0. Zkus místo čísla 2 dát třeba 8. Pokud $i budeš mít třeba 5, podmínka splněna nebude...

Teď zjišťuji, že to funguje ještě jinak. Raději se takovým konstrukcím vyhni.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
spider-x
~ Anonymní uživatel
11 příspěvků
18. 10. 2014   #7
-
0
-

#6 Kit
dobře :-) Díky

Nahlásit jako SPAM
IP: 77.95.45.–
kriplozoik
~ Anonymní uživatel
16 příspěvků
29. 10. 2014   #8
-
0
-

Jen taková poznámka: v některých jazycích to takhle funguje (např. v některých mutacích Basicu, třeba QBasic, nebo CASE WHEN .. THEN v MySQL), ale v PHP se logický výraz vyhodnotí jako true nebo false.

Nahlásit jako SPAM
IP: 94.112.250.–
Kit+15
Guru
29. 10. 2014   #9
-
0
-

#8 kriplozoik
Jak jsem již psal, dají se použít i běžné konstrukce, které jsou mnohem čitelnější a nespoléhají na vlastnosti, které se mohou bez varování z verze na verzi změnit.

V jazyku SQL se například nachází zajímavé konstrukce, které moc lidí nezná. S takovými funkcemi if(), ifnull() a nullif() se také dá slušně čarovat.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

Podobná vlákna

Podivné chování jazyka C++ — založil NeprijemnePrekvapeny

Shoutbox fungující na IC — založil arzen

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý