Autor Zpráva
Parsel
Profil *
Ahoj, mám takový dotaz na funkčnost switche, nemám teď možnost si to otestovat, ale nepustí mě to z hlavy - bude fungovat následující zápis?

switch (true) {
  
        case (($page == 'novinky') or ($page == 'archiv')) :
  
              break;
             }
             
Radek9
Profil
Parsel:
Ano, fungovat to bude, ale přijde mi to jako takové prznění switche. Brání ti něco podmínky použít? Právě přesně pro tyto logické hodnoty byly vytvořeny.
YoSarin
Profil
Parsel:
To co jsi napsal je ekvivalentní k (podle mně přehlednějšímu) zápisu:
switch ($page) {
    case 'novinky':
    case 'archiv':
        doSomething();
    break;
}
To jen pokud bys to opravdu chtěl použít na takový typ větvení který máš v ukázce... (s AND, případně větším množstvím proměnných už by to takhle nešlo)
Parsel
Profil *
Rekneme ze pomoci switche prirazuji dle promene $page template, celkem asi 12 ruznych, ale v jednom pripade mam pro $page 'novniky' nebo 'archiv' stejnou template, tudiz jsem to nechtel rekneme duplikovat ale priradit na jednom miste. Resil bys to jinak?


YoSarin: o tomto zapisu jsem nemel poneti, myslim ze to bude presne to, co potrebuji!
Joker
Profil
Parsel:
Ještě k tomu dodám, že v PHP když na konci case větve není break, pokračuje se jednoduše na dalším řádku, neboli zpracování „propadne“ do následující větve.
Tedy je možné udělat i:
switch ($page) {
    case 'novinky':
        foo(); // kód jen pro $page = 'novinky'
    case 'archiv':
        doSomething(); // kód společný pro 'novinky' a 'archiv'
    break;
}

V některých jiných jazycích, například C#, toto udělat nejde (argumentem je, že to „propadávání“ způsobuje záludné chyby v případě, že programátor na break zapomene neúmyslně), ale pořád je možné „seskupovat“ několik case tak, jak to píše YoSarin (tj. bez kódu mezi nimi).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0