Základy PHP 1 | PHP Slovníček

Podmínky v PHP

Ilustrativní foto

Tip: Kódy si můžete vyzkoušet na PHP Playground.

Jednoduchá podmínka = POKUD je splněna podmínka, proveď nějaké příkazy.

<?php 
  // Funkce date() umí pracovat s počítačovým datem a časem
  // - jako parametr funkce se zadává řetězec
  // - jednotlivá písmenka v řetězci funkce nahradí za daný časový údaj
  // - např. "H" se zamění za hodiny (ve formátu 00-23)
  // - - v 15:25 tak bude date('H') vracet hodnotu 15

  // Zjisti denní hodinu
  $cas = date('H') ;
  
  // A teď naše podmínka:
  // POKUD je více než 6 hodin večer, vypíšeme, že je večer
  if ($cas >= 18) {
    echo "Už je večer." ;
  }
  // POZOR: Na php-play.dev je "anglický" čas, tj. o hodinu méně než v Čechách
?>

1. Jednoduché větvení programu

Jednoduché větvení = POKUD je splněna podmínka, proveď nějaké příkazy, JINAK proveď jiné příkazy.

<?php 
  // Zjisti denní hodinu
  $cas = date('H') ;

  // POKUD je více než 18 hodin, vypíš, že je večer, 
  // JINAK vypiš, že večer ještě není
  if ($cas >= 18) {
    echo "Už je večer." ;
  }
  else {
    echo "Ještě není večer" ;
  }
  // POZOR: Na php-play.dev je "anglický" čas, tj. o hodinu méně než v Čechách
?>

2. Vícenásobné větvení programu

Vícenásobné větvení = proveď příkazy "podle situace".

<?php 
  // Pozdrav podle toho, jaká denní doba zrovna je

  // Zjisti denní hodinu
  $cas = date('H') ;

  // Sestav pozdrav
  if ($cas < 6) {
    $pozdrav = "Doboru noc." ;
  }
  elseif ($cas < 10) {
    $pozdrav = "Dobré ráno." ;
  }
  elseif ($cas < 12) {
    $pozdrav = "Dobré dopoledne." ;
  }
  elseif ($cas < 18) {
    $pozdrav = "Dobré odpoledne." ;
  }
  elseif ($cas < 22) {
    $pozdrav = "Dobrý večer." ;
  }
  else {
    $pozdrav = "Dobrou noc." ;
  }

  // Vypiš pozdrav
  echo $pozdrav ;

  // POZOR: Na php-play.dev je "anglický" čas, tj. o hodinu méně než v Čechách
?>

Při složené podmínce se počítač rozhoduje podle více kritérií.

Ve složených podmínkách se používají logické operátory (používáme && a ||)

<?php 
  // V neděli odpoledne od 2 do 4 hodin odpoledne jsem na fotbale

  // Zjisti denní hodinu
  $cas = date('H') ;

  // Zjisti den (resp. číslo dne od 1 do 7, 1=pondělí, 7-neděle)
  $den = date('N') ;

  // POKUD je neděle mezi 2 a 4 hodinami odpoledne, vypíš, že jsem na fotbale 
  if ( $den==7 && $cas>=14 && $cas<=15 ) {
    echo "Jsem na fotbale." ;
  }
  // POZOR: Na php-play.dev je "anglický" čas, tj. o hodinu méně než v Čechách
?>

Poznámka: I u složených podmínek je možné použít větvení pomocí else a/nebo elseif.

Vnořené podmínky umožňují provést totéž, jako složené podmínky, ale jiným zápisem.

Lze se vyhnout použití logických operátorů (&& a ||).
Kód je ale obvykle nepřehlednější, bývá tedy lepší použít složenou podmínku.

<?php 
  // V neděli odpoledne od 2 do 4 hodin odpoledne jsem na fotbale

  // Zjisti denní hodinu
  $cas = date('H') ;

  // Zjisti den (resp. číslo dne od 1 do 7, 1=pondělí, 7-neděle)
  $den = date('N') ;

  // POKUD je neděle mezi 2 a 4 hodinami odpoledne, vypíš, že jsem na fotbale 
  if ($den==7) {
    if ($cas>=14) {
      if ($cas<=15) {
        echo "Jsem na fotbale." ;
      }
    }
  }
  // POZOR: Na php-play.dev je "anglický" čas, tj. o hodinu méně než v Čechách
?>

Poznámka: I u vnořených podmínek je možné použít větvení pomocí else a/nebo elseif.

POZOR

Programovací jazyky (i PHP) z praktických důvodů umožňují psát do if nejen TRUE a FALSE.

Můžeme se tedy setkat s podmínkami typu

  • if (cislo)
  • if (retezec)
  • if (pole)

a bylo by tak dobré vědět, jak s nimi PHP naloží.

<?php 
  // 1. ČÍSLA: 
  // Místo nuly (0) se vyhodnotí FALSE, místo ostatních čísel TRUE

  if (5-5) {
    echo "Čau." ;   // Nic se nevypíše, protože PHP bere nulu jako FALSE
  }
  
  if (5) {
    echo "Ahoj." ;   // Vypíše se "Ahoj", protože PHP bere pětku jako TRUE
  }
  
  // 2. ŘETĚZCE: 
  // Místo prázdného řetězce ("") se vezme FALSE, místo všech ostatních TRUE

  $text = "" ;
  if ($text) {
    echo "Čau." ;   // Nic se nevypíše, protože PHP bere "" jako FALSE
  }
  
  $text .= "Pět." ;
  if ($text) {
    echo "Ahoj." ;   // Vypíše se "Ahoj", protože PHP bere "Pět." jako TRUE
  }
  
  // 3. POLE: 
  // Místo prázdného pole ([]) se vezme FALSE, místo všech ostatních TRUE

  $pole = [] ;
  if ($pole) {
    echo "Čau." ;   // Nic se nevypíše, protože PHP bere "" jako FALSE
  }
  
  $pole[] = 5 ;
  if ($pole) {
    echo "Ahoj." ;   // Vypíše se "Ahoj", protože PHP bere pole [5] jako TRUE
  }
  
  // 4. NULL: 
  // "Prázdná hodnota" NULL je vždy FALSE

  if (NULL) {
    echo "Čau." ;   // Nic se nevypíše, protože PHP bere NULL jako FALSE
  }
?>

POZOR

Bez podmínek se v programování dozajista nelze obejít.

Použití příliš mnoha podmínek ale hodně ztěžuje čitelnost textu.
Pokud to jde, podmínce se vyhneme.

Příklad 1 (zabere možná více přemýslení, než se na první pohled zdá; zkuste ho pochopit KOMPLET):
<?php 
  // CÍL: VYPIŠ ČESKY JMÉNO AKTUÁLNÍHO DNE V TÝDNU

  // 1. SLOŽENOU PODMÍNKOU

  $cisloDne = date('N') ;

  if ($cisloDne == 1) {
    echo "Pondělí" ;   
  }
  else if ($cisloDne == 2) {
    echo "Úterý" ;   
  }
  else if ($cisloDne == 3) {
    echo "Středa" ;   
  }
  else if ($cisloDne == 4) {
    echo "Čtrvtek" ;   
  }
  else if ($cisloDne == 5) {
    echo "Pátek" ;   
  }
  else if ($cisloDne == 6) {
    echo "Sobota" ;   
  }
  else {
    echo "Neděle" ;   
  }
  
  // 2. MŮŽEME ZAPŘEMÝŠLET, POUŽÍT KISS A VYMYSLET KÓD

  $ceskeDnyVTydnu = [
    'Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota', 
  ] ;
  echo $ceskeDnyVTydnu[ date('w') ] ;

?>

POZOR

Oba kódy (podmínka na 20 řádků i použití pole na 4 řádky) udělají stejnou práci.

Všimněte si:

  • V prvním řešení používám ke zjištění dne funkci date('N'),
    protože tak (tady v Čechách) běžně přemýšlíme.
  • Ve druhém řešení používáme date('w') a pole, které jsme si "vymysleli",
    proto potřebujeme číslo dne začínající na 0 (počítač si prvky pole čísluje od 0)
  Předchozí stránkaNásledující stránka