Programovánà v PHP - 3.dÃl - Rozhodovacà struktury
Vítejte u pokraÄování seriálu Programování v PHP. V tomto díle si povíme nÄ›co málo o rozhodovacích strukturách, tj. způsob vÄ›tvení programu. Dále si ukážeme, jak zjistit typ promÄ›nné a nakonec si ukážeme praktický pÅ™íklad, jak generovat obsah v PHP stránce na základÄ› paramatru v adrese url.
Co je to vÄ›tvení
VÄ›tvení programu je způsob, jakým se dá podmínit vývoj programu na základÄ› napÅ™. nÄ›jaké hodnoty v promÄ›né. PÅ™edstavme nyní, že máme v programu Å™ešit rovnice n-tého stupnÄ›. Tyto rovnice mají různý poÄet Å™ešení a my potÅ™ebujeme v pÅ™ípadÄ›, že má jedno Å™ešení napsat nÄ›jaký text, v pÅ™ípadÄ›, že má dvÄ›, zase jiný text atd. Napíšeme si tedy podmínku, že když se mezivýpoÄet rovná urÄitÄ› hodnotÄ› provede výpis textu a když má jinou urÄenou hodnotu, provede se zase jiný pÅ™íkaz.
Podmíny if
Podmínky if jsou nejzákladnÄ›jší typ vÄ›tvení. NejdÅ™íve se stanoví podmínka, která když platí, tak se vykonají pÅ™íkazy uzavÅ™ené mezi složené závorky. Pro porovnání hodnot promÄ›nných se používají vÄ›tší (>), mÄ›nší (<), vÄ›tší, nebo rovno (>=), menší, nebo rovno (<=) a samozÅ™ejmÄ› rovno (==) a není rovno (!=). PÅ™i rovnosti pozor, zapisují se dvÄ› rovnítka. Struktura podmínky vypadá následovnÄ›
<?php if (podmínka) { pÅ™íkaz; pÅ™íkaz; a další pÅ™íkazy; } ?>
Pokud chceme stanovit více podmínek, než jednu, je to urÄitÄ› možné. Nesmíme ale zapomenou na to, že musíme pro podmínky stanovit buÄ konjukci (a, programovÄ› && (ALT + c)) a nebo disjunkci (nebo, programovÄ› || (ALT + w)). Nyní zkusíme simulovat situaci, kdy jsme od uživatele získali jeho vÄ›k a když bude v rozmezí od 15 - 18, vypíšeme nÄ›jaký text.
<?php $vek = 14; // V realné situaci bychom vÄ›k od uživatele nÄ›jak získali, zde si ho zadáme // Podmínka if ($vek >= 15 && $vek <= 18) { echo ("Váš vÄ›k je v zadaném rozmezí !"); } ?>
V pÅ™íkladu jsme rozmezí 15-18 urÄili tak, že $vek bude vÄ›tší, nebo rovno 15, ale zároveň menší, nebo rovno 18. A co kdybychom chtÄ›li pÅ™idat možnost, kdy bude vÄ›k mezi 20-30 roky. Pro tuto situaci lze použít buÄ další konstrukce if, ale v tom pÅ™ípadÄ› se nám může stát, že budou platit obÄ› podmínky a texty by se nám vypsali dva (v tomto pÅ™íkladÄ› to samozÅ™ejmÄ› nenastane, ale jde o princip). Proto lze konstrukce if rozšíÅ™it o konstrukce else if.
<?php $vek = 14; // V realné situaci bychom vÄ›k od uživatele nÄ›jak získali, zde si ho zadáme // Podmínka if ($vek >= 15 && $vek <= 18) { echo ("Váš vÄ›k je v zadaném rozmezí !"); } else if ($vek >= 20 && $vek <= 30) { echo ("Váš vÄ›k je v rozmezí 20-30 let !"); } ?>
A co nastane, když nebude vÄ›k v žádném uvedeném rozmezí ? Použijeme konstrukci else, která zajístí výpis informaÄního textu v pÅ™ípadÄ›, že nastane jakákoli jiná situaci.
<?php $vek = 14; // V realné situaci bychom vÄ›k od uživatele nÄ›jak získali, zde si ho zadáme // Podmínka if ($vek >= 15 && $vek <= 18) { echo("Váš vÄ›k je v zadaném rozmezí !"); } else if ($vek >= 20 && $vek <= 30) { echo("Váš vÄ›k je v rozmezí 20-30 let !"); } else { echo("Nastala nÄ›jaká úplnÄ› jiná situace !"); } ?>
Shrnutí
Pro stanovení podmínek tedy použijeme konstrukci if a else if a pro pÅ™idání možnosti, že se neprovede žádná podmínka, se pÅ™idá konstrukce else. Je jasné, že konstrukce else smí být v jednom takovém komplexu podmínek pouze jedna.
VÄ›tvení pomocí switch
Konstrukce switch je další možnost vÄ›tvení programu. PopravdÄ› ji moc nemám rád, je taková kÅ™eÄovitá. V podstatÄ› je to omezenÄ›jší podmínka if.
switch (promÄ›nná) { case hodnota : pÅ™íkaz; break; case hodnota : pÅ™íkaz; break; default : pÅ™íkaz; }
Tato konstrukce bude porovnávat hodnotu promÄ›nné mezi závorkami za switch ("promÄ›nná") s hodnotou za case ("hodnota") a pokud se hodnoty shodují, vykoná se pÅ™íkaz za dvojteÄkou. Pokud nenastane žádná z uvedených možností, vykoná se pÅ™íkaz za default.
Generování obsahu v PHP
S použítí podmínek lze udÄ›lat velice jednoduše dynamické generování obsahu na základÄ› hodnoty paramtru v adrese URL. V minulém díle jsme si Å™íkali o zpracování formulářů a zmínili jsme metody POST a GET. To se nám bude hodit, protože my můžeme místo odeslání formuláÅ™e použít klasický odkaz na umístÄ›ní tÅ™eba index.php?id=2 a s parametrem v adrese můžeme pracovat za pomocí pÅ™íkazu $_GET['id'].
Potom za základÄ› toho, jaké bude id v adrese, můžeme generovat obsah do stránky. Kód by mohl vipadat asi jako na ukázce :
<?php $id = $_GET['id']; //hodnotu si nejdÅ™íve pÅ™edáme do promÄ›nné pro lepší práci if ($id == 1) { ?> <h1>Hlavní strána</h1> <p>Text hlavní stránky</p> <?php } else if ($id == 2) { ?> <h1>Další stránka</h1> <p>Text další stránky...</p> <?php } else { ?> <h1>Nenalezeno</h1> <p>Stránka nebyla nalezena</p> <?php } ?>
Zde si povšimnÄ›te toho, že jsem jakoby pÅ™erušil PHP kód a pokraÄoval jsem HTML kódem, potom jsem v PHP zase pokraÄoval. I to je možné a je to velice elegantní způsob, když máme více HTML kódu, který chceme vypsat.
ZjišÅ¥ování typu promÄ›nné
V prvním díle tohoto seriálu jsme se bavili o tom, že PHP je prakticky netypový jazyk. I když se datový typ pro definici promÄ›nné nepoužívá, nÄ›co jako datové typy tu pÅ™eci jenom jsou. Datový typ promÄ›né se urÄí tak, že do promÄ›né uložíme nÄ›jakou hodnotu. Potom má tato promÄ›nná datový typ odpovídající datovéme typu hodnoty, kterou jsme do promÄ›nné ložili. PÅ™i zjišÅ¥ování typu promÄ›nné máme v PHP k dispozici pár užiteÄných funkcí.
- is_bool() - vrací hodnotu TRUE, pokud je promÄ›nná v parametru funkce typu bool (tj. logická hodnota)
- is_integer() - vrací hodnotu TRUE, pokud je promÄ›nná v paramtru funkce typu int (tj. celé Äíslo)
- is_string() - vrací hodnotu TRUE, pokud je promÄ›nná v paramtru funkce typu string (tj. rwxt)
- is_float() - vrací hodnotu TRUE, pokud je promÄ›nná v paramtru funkce typu float (tj. desetinné Äíslo)
<?php $promenna = true; // PromÄ›nná libovolného typu if(is_bool($promenna) == true) { echo("PromÄ›nná je typu bool !"); } else if(is_integer($promenna)) { echo("PromÄ›nná je typu int !"); } else if(is_string($promenna)) { echo("PromÄ›nná je typu string !"); } else if(is_float($promenna)) { echo("PromÄ›nná je typu float !"); } ?>
Pokud porovnáváme logické hodnoty používáme buÄ honoty TRUE a FALSE a nebo můžeme podmínku zapsat jako na pÅ™íkladu níže a bude to stejné, jako bychom výraz porovnávali hodnotou TRUE.
<?php if(is_integer($promenna)) { echo("PromÄ›nná je typu int !"); } ?>
My si ukážeme ještÄ› jednu možnost, jak získat typ promÄ›nné. Typ promÄ›nné lze získat požitím funkce gettype(), která jako parametr oÄekává samozÅ™ejmÄ› zase promÄ›nnou a tatu funkce vrací textovou sekvenci oznaÄující datový typ romÄ›nné.
<?php $text = "Ahoj, jak se máš"; // Výpis informaÄního textu o datovém typu promÄ›nné echo("PromÄ›nná text je typu ". gettype($text)); ?>
Na konec
Tímto pÅ™íkladem je to k tomuto dílu vše. Dnes jsme si ukázali v praxi velice užiteÄnou vÄ›c, dynamický obsah. V dalším díle se podíváme na pole a na práci s cookies, s kterou si nakonec ukážeme zase nÄ›jakou aplikace.