Zdravím.
Tak mě napadlo, jaký je rozdíl v provádění příkazů if a switch, pokud chci například rozdělit chování skriptu podle nějakýho kritéria.
Dejme tomu, mám tyto dvě verze:
1]
if ($den=="Po") {prikazy...}
if ($den=="Ut") { jine prikazy...}
if ($den=="St") {zas jine prikazy...}
.
.
.
2]
switch($den)
case "Po": {prikazy...; break;}
case "Ut": {jine prikazy...; break;}
case "St": {zas jine prikazy...; break;}
.
.
.
Jakou variantu je lepší použít? Napsal sem si něco takovýho tou první variantou, ale pak sem si řekl, že přece můžu použít switch, a pak mě
napadlo, jestli je to vůbec lepší (podmínky testuju stejně, navíc musím
u každé větve použít break....)
Pokud nejsou ty if podminky spojeny pres "else if", tak bude druha varianta lepsi - jak se potka prvni vyhovujici, ostatni uz se neporovnavaji.
S else if si netroufnu tipnout jestli je nektera rychlejsi.
Jojo, díky. To mi nedošlo, že if příkazy se budou testovat i dál, to je fakt.
Tak potom už by mě zajímalo jen to, když místo if-příkazů budu používat ono else if. :)
Noo...rekneme ze pouzit switch je programatorsky cistsi.
A rekneme ze ja se se switchem nikdy nejak neszil :P
(V pascalu jsem si skoro jisty, ze se switch/case prekladal jako serie ifu...v C++ a php to nejspis budou skoky, ale to je if ve vyslednem strojovem kodu vlastne taky...takze vazne nevim. Nelamal bych si s tim hlavu. if...else if... nebo switch.)
OK, díky. Já to mám rozdělený na docela dost případů, tak sem chtěl, aby to bylo co nejrychlejší, ale zdá se to v pohodě, tak snad dobrý. :)
Ver tomu, ze je dobre pouzivat veci k ucelum, ke kterym je nekdo vytvoril. Tedy na rozdeleni podle dnu v tydnu pouzit sviste, a tam kde to nejde (napr. kdyz jedna podminka je ($x==4) a druha ($y!='Hello') ) pouzit elseif. Bud si jist, ze je to to nejlepsi, co muzes udelat.
Presne tak, jak ti psali.
Ty varianty bych doplnil:
1]
if ($den=="Po") {prikazy...}
if ($den=="Ut") { jine prikazy...}
if ($den=="St") {zas jine prikazy...}
1]b
if ($den=="Po") {prikazy...}
elseif ($den=="Ut") { jine prikazy...}
elseif ($den=="St") {zas jine prikazy...}
1]c
if ($den=="Po" || $den=="Ut" && $den=="St") {prikazy...}
elseif ($den=="Ut") { jine prikazy...}
elseif ($den=="St") {zas jine prikazy...}
1]d
if ($den=="Po") {prikazy...}
elseif ($den=="Ut") { jine prikazy... return;}
elseif ($den=="St") {zas jine prikazy... return;}
2]
switch($den) {
case "Po": {prikazy...; break;}
case "Ut": {jine prikazy...; break;}
case "St": {zas jine prikazy...; break;}
2]a
switch($den) {
case "Po": case "Ut": {prikazy...; break;}
case "St": {jine prikazy...; break;}
case "Ct": {zas jine prikazy...; break;}
2]b
switch($den) {
case "Po": case "Ut": {prikazy...; break;}
case "St": {jine prikazy...; break;}
case "Ct": {zas jine prikazy...; break;}
default : {}
kde 1c 1d muze byt docela zajimave a 2b take, kdyz za kazdych okolnosti se neco provede.
jinak bych zkusil jakpsatweb.cz forum - PHP
nej doplnim ze u switch jsou vnitrni slozene zavorky uplne nadbytecne, zato neni dobre zapominat na break (jedna z typickych chyb programatoru)
If+elseif a switch+case jsou stejně použitelné. Používej to, cos e ti bude víc líbit nebo bude vypadat v kódu lépe.