Příkazy pro větvení aplikace

Příkazy pro větvení dávají aplikaci základní schopnost rozhodování, která je zapotřebí pro většinu vámi vytvořených aplikací. Příkazy pro větvení aplikace nám umožňují stanovit bloky kódu, které budou provedeny pouze za určitých podmínek. PHP umožňuje dvě podmíněné konstrukce. První je if...else if...else, která nám umožňuje testovat různé výrazy a v závislosti na jejich hodnotách provádět přikazy. Pro případ, že chceme testovat místo více hodnot jediný výraz, PHP umožňuje konstrukci switch...case, která tuto operaci zjednodušuje.

Příkaz if

Příkaz if je pravděpodobně jedním z nejdůležitějších příkazů každého programovacího jazyka. Umožňuje provádět vybrané řádky kódu, pouze pokud nastanou vámi zadané podmínky. Jak již víme, vyhodnocení výrazu vrátí logickou hodnotu TRUE či FALSE. Pro zjištění, zda výraz platí, jsme použili příkaz echo, nyní výraz předáme příkazu if, který ho vyhodnotí a pokud platí, vykoná příkaz uvedený za podmínkou.

<?php

  $Zeme 
'cz';

  
// Česká republika se vypíše pouze v případě, že $Zeme je cz
  
if ($Zeme == 'cz') echo 'Česká republika';

?>

Jestliže má být po splnění podmínky vykonáno více příkazů, uzavíráme je do složených závorek, viz. "složený příkaz" na začátku našeho seriálu.

<?php

  define
('NL'"<br>\r\n");
  
$Zeme 'cz';

  if (
$Zeme == 'cz') {
    echo 
'Česká republika'NL;
    echo 
'Hlavní město: Praha'NL;
    echo 
'Počet obyvatel: 10.5 mil'NL;
  }

?>

Co by se stalo, kdyby více příkazů nebylo uzavřeno ve složených závorkách? Jednoduše by se k podmínce připojil pouze první příkaz a další by byly chápány samostatně, provedly by se vždy, bez ohledu na podmínku.

<?php

  define
('NL'"<br>\r\n");
  
$Zeme 'sk';

  if (
$Zeme == 'cz')
    echo 
'Česká republika'NL// Nevypíše se, podmínka neplatí.
    
echo 'Hlavní město: Praha'NL// Vypíše se!
    
echo 'Počet obyvatel: 10.5 mil'NL// Vypíše se!

?>

Nenechte se zmást tím, že jsou další dva příkazy od kraje stejně odsazené jako první, PHP odsazení ignoruje. Pokud chcete, můžete do složených závorek uzavřít i jediný příkaz, abyste se v budoucnu vyhnuli zbytečnému hledání potenciální chyby v kódu v případě, že vám podmínka nebude fungovat, jak jste předpokládali.

Podmínka, kterou testujeme (v závorkách) musí být vyhodnotitelná jako logická hodnota (true/false). Stejně jako podmínka, která nenastala, jsou nula, prázdný řetězec, nedefinované hodnoty a předdeklarovaná konstanta FALSE vyhodnoceny jako nepravda (FALSE). Takže například následující výrazy jsou nepravda:

<?php

  
if (3) {echo 'Toto se nevypíše.';}

  if (
FALSE) {echo 'Toto se nevypíše.';}
  
// FALSE je předdeklarovaná konstanta.

  
if ('0') {echo 'Toto se nevypíše.';}
  
// Řetězec se automaticky převede na číslo 0

  
if (isset($m)) {echo 'Toto se nevypíše.';}
  
// Za předpokladu, že proměnná $m nebyla definována.

?>

Pravda (TRUE) je ekvivalentem nenulového čísla, neprázdného řetězce, stejně jako když je podmínka splněna. Následující výrazy budou vyhodnoceny jako pravda:

<?php

  
if ('FALSE') {echo 'Toto se vypíše.';}
  
// "FALSE" je vyhodnoceno jako řetězec.

  
if ('00') {echo 'Toto se vypíše.';}
  
// Řetězec skládající se ze dvou nul

  
if (== 0) {echo 'Toto se vypíše.';}
  
// Nula se rovná nule, takže výraz je pravdivý.

?>

A nyní si připomeneme, jak kombinovat podmínky pomocí logických operátorů.

<?php

  
if ((3) || (2) && (== 5)) {
    echo 
'Podmínka platí.';
  }

  
/*
    Závorka spojená operátorem || (logické nebo) platí,
    neboť stačí, že platí její první část, a výraz
    5 == 5 také platí, takže celá podmínka je pravdivá.
  */

?>

Rozvětvené podmínky

PHP nám umožňuje pomocí klíčového slova else určit jiný blok kódu, který má být proveden v případě, že je testovaná podmínka nepravdivá. Každý z těchto podmíněně prováděných bloků se nazývá větev a každá větev musí, v případě, že obsahuje více než jeden řádek kódu, být umístěna uvnitř složených závorek.

<?php

  $x 
= -5;

  if (
$x 0) {
    echo 
'$x je záporné číslo.';
  }
  else {
    echo 
'$x je kladné číslo.';
  }

?>

Tato podmínka kontroluje hodnotu proměnné $x a v případě, že je menší než nula, vypíše "$x je záporné číslo.", jinak vypíše "$x je kladné číslo.". No, ale co s nulou? Ta není ani záporná, ani kladná. Výše uvedený kód vypíše "$x je kladné číslo.", ale jak bychom měli vypsat "$x je nula." ?

PHP obsahuje také klíčové slovo else if, které nám umožňuje v případě nesplnění hlavní podmínky testovat alternativní podmínky. Za jedním příkazem if může být i více příkazů else if. Konečná větev else pak obsahuje kód, který by měl být proveden v případě, že nebyla splněna ani jedna z předchozích podmínek za if nebo else if.

<?php

  $x 
0;

  if (
$x 0) {
    echo 
'$x je záporné číslo.';
  }
  else if (
$x == 0) {
    echo 
'$x je nula.';
  }
  else {
    echo 
'$x je kladné číslo.';
  }

?>

Možné a dokonce časté je při použití else if testování úplně odlišných podmínek.

<?php

  
if ($Zeme == 'cz') {
    
// Něco udělej...
  
}
  else if (
$Pozice == 2) {
    
// Udělej něco jiného...
  
}

?>

Pamatujte si, že i když jsou splněny obě podmínky, provede se pouze první z nich. Velmi časté je také vnoření příkazů if do nadřazeného příkazu if.

<?php

  
if ($Zeme == 'cz') {
    if (
$Mesto == 'Praha') {
      echo 
'Největší město v České republice';
    }
    else if (
$Mesto == 'Brno') {
      echo 
'Druhé největší město v České republice';
    }
  }

?>

Ekvivalentní zápis může vypadat i takto:

<?php

  
if (($Zeme == 'cz') && ($Mesto == 'Praha')) {
    echo 
'Největší město v České republice';
  }
  else if ((
$Zeme == 'cz') && ($Mesto == 'Brno')) {
    echo 
'Druhé největší město v České republice';
  }

?>

PHP nabízí také alternativní syntaxi podmíněných příkazů - if...endif. Nepoužívají se složené závorky a za podmínkami jsou dvojtečky. Poslední příkaz endif zakončuje příkaz if místo složené závorky. Tato syntaxe také přísně vyžaduje zápis klíčového slova elseif (bez mezery), obyčejně jsou povoleny obě varianty.

<?php

  define
('NL'"<br>\r\n");
  
$Zeme 'pl';

  if (
$Zeme == 'cz'):
    echo 
'Česká republika'NL;
    echo 
'Hlavní město: Praha'NL;
  elseif (
$Zeme == 'sk'):
    echo 
'Slovensko'NL;
    echo 
'Hlavní město: Bratislava'NL;
  elseif (
$Zeme == 'pl'):
    echo 
'Polsko'NL;
    echo 
'Hlavní město: Varšava'NL;
  elseif (
$Zeme == 'de'):
    echo 
'Německo'NL;
    echo 
'Hlavní město: Berlín'NL;
  endif;

?>

Tato alternativní syntaxe je zvláště užitečná pro vkládání bloků kódu HTML.

<?php if ($Zeme == 'cz'): ?>

<h1>Česká republika</h1>
<p>...</p>

<?php elseif ($Zeme == 'sk'): ?>

<h1>Slovenská republika</h1>
<p>...</p>

<?php endif; ?>

Klasickou syntaxi se složenými závorkami lze použít podobně:

<?php if ($Zeme == 'cz') { ?>

<h1>Česká republika</h1>
<p>...</p>

<?php } else if ($Zeme == 'sk') { ?>

<h1>Slovenská republika</h1>
<p>...</p>

<?php ?>

Příkaz switch

<?php

  
switch ($Zeme) {
    case 
'cz':
      echo 
'Česká republika';
    break;

    case 
'sk':
      echo 
'Slovenská republika';
    break;

    case 
'pl':
      echo 
'Polsko';
    break;

    default: 
// Náhrada za else
      
echo 'Německo';
    break;
  }

?>

Příkaz switch je zjednodušená syntaxe příkazů if...else if...else. Tento příkaz vyhodnocuje hodnotu $Zeme a porovnává ji s každou hodnotou za klíčovým slovem case. Pokud je nalezena odpovídající hodnota, jsou provedeny příkazy spojené s touto volbou ukončené příkazem break. Pokud není nalezena žádná odpovídající hodnota, jsou provedeny příkazy za default. Tato volba je ale nepovinná.

Příkaz break se používá pro ukončení provádění příkazů vztahujících se k dané volbě. Pokud má $Zeme hodnotu "cz", vypíše se "Česká republika". Kdyby zde nebyl příkaz break, vypsaly by se i další státy. To může být užitečné, ale i katastrofální - Záleží na tom, co jsme v kódu zamýšleli.

<?php

  
switch ($Zeme) {
    case 
'cz':
    case 
'sk':
    case 
'de':
      echo 
'Střední Evropa';
    break;

    case 
'uk':
    case 
'fr':
      echo 
'Západní Evropa';
    break;
  }

?>

Zde jsme zde použili příkaz switch jako náhradu za spojování podmínek operátorem || (logické nebo). Při použití příkazu if by zápis vypadal následovně:

<?php

  
if ($Zeme == 'cz' || $Zeme == 'sk' || $Zeme == 'de') {
    echo 
'Střední Evropa';
  }
  else if (
$Zeme == 'uk' || $Zeme == 'fr') {
    echo 
'Západní Evropa';
  }

?>

 

« Obsah učebnice