Kurz PHP – lekcia číslo 3 – riadiace štruktúry if, switch

Riadiace štruktúry sú také štruktúry jazyka, ktoré umožňujú riadiť chod programu alebo skriptu. Môžte ich zoskupovať do štruktúr pre vetvenie programu a do štruktúr pre opakované vykonávanie – cyklov. V tomto článku sa budeme zaoberať implementáciou podmienkových štruktúr if a switch.

Pokiaľ chceme rozumne reagovať na dáta od užívateľa, musíme do nášho kódu vložiť akúsi “umelú inteligenciu”, aby sa kód vedel sám rozhodovať. K tomu slúžia konštrukcie pre vetvenie programu.

Príkazy if

Rozhodovať sa môžeme pomocou príkazu if. Je nutné zadať podmienku, ktorá sa má vyhodnotiť a blok kódu, ktorý sa vykoná, ak je výsledok true. Tento blok kódu umiestnime do zátvoriek { }. Syntax je nasledovná:

if(podmienka)
{
  echo "Podmienka splnená.<br/>";
  echo "Ďalší zbytočný príkaz.";
}
echo "Tento kód sa vykoná vždy.";

Existuje ešte jedna možnosť, ako zapísať podmienku, ale neodporúčam ju používať. V tomto článku budeme používať prehľadnejší spôsob a tým sú zložené zátvorky { }. Prípustná je aj nasledovná syntax:

if(podmienka):
 echo "Podmienka splnená.";
endif;
echo "Tento kód sa vykoná vždy.";

V praxi budete dosť často používať bloky kódu (najmä pri rozsiahlejších aplikáciách) – je to kód umiestnený medzi zloženými zátvorkami. Nemusí to teda byť len jeden riadok (napr. naše echo s výpisom textu “Podmienka splnená.”). Často však potrebujeme vykonať len jeden jediný príkaz. V takom prípade máme zjednodušenú variantu:

if(podmienka)
  echo "Podmienka splnená.";
echo "Tento kód sa vykoná vždy.";

Ako iste viete, PHP sa nestará o to, ako rozvrhnete kód, ktorý píšete. Aby bol kód zrozumiteľnejší a prehľadnejší, mali by ste logické celky odsadzovať (na to slúži také to tlačidlo s nápisom TAB na klávesnici niekde nad CAPS LOCKom). Odsadením ľahko odlíšite riadky kódu, ktoré sa vykonajú iba pri splnení podmienky, alebo ktoré riadky sú časťou bloku, prípadne funkcií a cyklov. Ako ste si mohli všimnúť, riadky, ktoré sa vykonajú pri splnení podmienky if (aj riadky tvoriace blok), sú odsadené.

Príkazy else

Často nestačí určit, ktorá akcia sa má vykonať. Budete sa musieť rozhodnúť medzi dvoma akciami. Príkaz else umožňuje definovať, čo sa má vykonať, ak je výsledok podmienky false. Syntax:

if(podmienka)
{
  echo "Podmienka splnená.<br/>";
  echo "Ďalší príkaz...";
}
else
{
  echo "Ľutujeme, podmienka nebola splnená. Program končí.";
  exit;
}

Príkazy elseif

Je veľa prípadov, kedy sa musíme rozhodovať medzi viac ako dvoma možnosťami. Pomocou príkazu elseif môžeme vytvoriť postupnosť mnohých podmienkok. Príkaz elseif je kombináciou príkazov else a if. Stojí za zmienku, že môžeme používať rovnako príkaz elseif a else if (s medzerou) – oba spôsoby správne.

if(podmienka)
  echo "Podmienka splnená.";
elseif(podmienka2)
  echo "Podmienka 2 splnená.";
elseif(podmienka3)
  echo "Podmienka 3 splnená.";
else
  echo "Nebola splnená ani jedna z podmienok.";

Príkazy switch

Príkat switch je v mnohom podobný príkazu if, ale naviac umožňuje určit viac ako dve hodnoty výsledku.  Podmienky určujete príkazom case – jeden príkaz case pre jednu hodnotu – prípadne príkazom default, ktorým určujete, čo robiť, ak nie je splnená žiadna podmienka. Najlepšie celú vec pochopíte na príklade.

Predstavte si, že robíte anketu. Chcete vediet, akým spôsobom sa vaši návštevníci dozvedeli o vašej stránke. Vložte do stránky nasledujúci HTMl kód:

<table>
<tr>
  <td>Ako ste sa dozvedeli o tejto stránke?</td>
  <td><select name="anketa">
        <option value="a">Z vyhľadávača</option>
        <option value="b">Od kamaráta</option>
        <option value="c">Z bigboardu</option>
        <option value="d">Z televízie alebo rozhlasu</option>
        <option value="e">Iné</option>
      </select>
  </td>
</tr>
</table>

Po odoslaní formuláru by nám pribudli nové premenné s hodnotami “a”, “b”, “c”, “d” a “e”. Spracovanie pomocou elseif by bolo trochu náročné a neprehľadné. Ešte že tu máme switch:

switch($_POST['anketa'])
{
  case 'a' :
    echo "Návštevník sa dostavil z vyhľadávača.";
    break;
  case 'b' :
    echo "Návštevník sa o stránke dopočul od kamaráta.";
    break;
  case 'c' :
    echo "Návštevník zhliadol reklamu na bigboarde.";
    break;
  case 'd' :
    echo "Návštevník videl/počul reklamu v televízií/rozhlase.";
    break;
  default:
    echo "Nevieme, ako nás tento návštevník našiel.";
    break;
}

Príkaz switch sa chová trochu odlišne ako príkazy elseif a if. Príkaz if ovplyvní iba jeden príkaz, pokiaľ úmyseľne nepoužijete zložené zátvorky, aby ste vytvorili blok príkazov. Príkaz switch sa chová úplne opačne. Akonáhle je splnená podmienka príkazu case, začne PHP vykonávať všetko, dokiaľ nenarazí na príkaz break. Keby ste v konštrukcii neuviedli príkazy break, vykonal by switch všetok kód nachádzajúci sa za case, ktorý bol true. Vo chvíli, kedy PHP narazí na príkaz break, skočí na prvý príkaz za príkazom switch.

switch vs. if

Pokiaľ ešte s týmito príkazmi neviete pracovať, zrejme sa opýtate: “Ktorý z nich je lepší?” Dobrá otázka. Žiaľ, neexistuje na ňu jednoznačná odpoveď. Neexistuje nič, čo by ste nedokázali urobiť pomocou jedného alebo viacerých príkazov if a elseif. To isté platí aj o príkaze switch. Mali by ste to skúsiť odhadnúť podľa toho, ktorý z týchto dvoch príkazov bude v danej situácii zrozumiteľnejší. Pamätajte: Ide vám o prehľadnosť a efektívnosť kódu. Tieto zásady si ešte v niektorom článku špeciálne pripomenieme.

Čo nás čaká v budúcom článku? Ak mi to zdravie umožní, ak dožijem, napíšem niečo o cykloch while, for, foreach a do…while. Pekný zvyšok dňa. ;)

Súvisiace články


Kategória: PHP, MySQL | 2,245 zobrazení Author: Michal Tomanóczy