Podmínky v PHP
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.
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
}
?>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.
<?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') ] ;
?>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)