switch

Konstrukt switch je podobná sérii konstruktů IF , testujících tentýž výraz . V mnoha případech můžete chtít porovnávat stejnou proměnnou ( nebo výraz ) s mnoha různými hodnotami a provádět různé kusy kódu v závislosti na tom , které hodnotě se rovná . To je přesně to , k čemu je switch .

Následující dva příklady představují dva odlišné způsoby , jak napsat totéž ; jeden používá sérii podmínek if , zatímco druhý je založen na konstruktu switch :

 
if

 
(

 
$i

 
==

 
0

 
)

 
{

 
print

 
"i

 
se

 
rovná

 
0"

 
;

 
}

 
if

 
($i

 
==

 
1

 
)

 
{

 
print

 
"i

 
se

 
rovná

 
1"

 
;

 
}

 
if

 
($i

 
==

 
2

 
)

 
{

 
print

 
"i

 
se

 
rovná

 
2"

 
;

 
}

 
switch

 
($i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
se

 
rovná

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
se

 
rovná

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
se

 
rovná

 
2"

 
;

 
break

 
;

 
}





Je důležité pochopit , jak se konstrukt switch provádí , aby se zabránilo chybám . Konstrukt switch provádí řádek po řádku ( resp . konstrukt po konstruktu ) . Na začátku není proveden žádný kód . Pouze tehdy , když se najde case s hodnotou odpovídající hodnotě výrazu u switch , začne PHP provádět následující konstrukty . Vykonávání kódu pokračuje , dokud se nedosáhne konce bloku switch nebo prvního příkazu break . Pokud nenapíšete na konec bloku po case příkaz break , bude PHP pokračovat v provádění dalších konstruktů ( po dalším case ) . Například :

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
se

 
rovná

 
0"

 
;

 
case

 
1

 
:

 
print

 
"i

 
se

 
rovná

 
1"

 
;

 
case

 
2

 
:

 
print

 
"i

 
se

 
rovná

 
2"

 
;

 
}





Zde , pokud se $i rovná 0 , se budou provádět všechny příkazy " print " ! Pokud se $i rovná 1 , PHP provede poslední dva příkazy , a pouze rovná-li se $i číslu 2 , obdržíte " očekávané " chování a zobrazí se pouze "i se rovná 2 " . Takže je důležité nezapomenout na příkaz break ( kromě případu , kdy ho chcete vynechat záměrně k dosažení určitého cíle ) .

V konstruktu switch se podmínka testuje pouze jednou a výsledek se porovnává s každou hodnotou v case . V případě elseif se podmínka pokaždé testuje znovu . Pokud je vaše podmínka komplikovanější než jednoduché porovnání a / nebo je uvnitř cyklu , switch může být rychlejší .

Seznam konstruktů za case může být také prázdný , což jednoduše předá řízení následujícímu case .

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
case

 
1

 
:

 
case

 
2

 
:

 
print

 
"i

 
je

 
menší

 
než

 
3

 
,

 
ale

 
nezáporné"

 
;

 
break

 
;

 
case

 
3

 
:

 
print

 
"i

 
je

 
3"

 
;

 
}





Speciální case je " default " . Vyhovuje všem ostatním hodnotám , které nejsou pokryty některým z ostatních case a být vždy jako poslední . Například :

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
se

 
rovná

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
se

 
rovná

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
se

 
rovná

 
2"

 
;

 
break

 
;

 
default

 
:

 
print

 
"i

 
se

 
nerovná

 
0

 
,

 
1

 
ani

 
2"

 
;

 
}





Výraz v case může být libovolný výraz , jehož hodnota je jednoduchého typu , tj . celé nebo reálné číslo nebo řetězec . Pole ani objekty nelze použít , ledaže by odkazovaly na jednoduchý typ .

Alternativní syntaxe pro konstrukty switch je podporována . Pro víc informací viz Alternativní syntaxe řídicích struktur .

 
switch

 
(

 
$i)

 
:

 
case

 
0

 
:

 
print

 
"i

 
se

 
rovná

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
se

 
rovná

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
se

 
rovná

 
2"

 
;

 
break

 
;

 
default

 
:

 
print

 
"i

 
se

 
nerovná

 
0

 
,

 
1

 
ani

 
2"

 
;

 
endswitch

 
;