Programování v PHP - 3.díl - Rozhodovací struktury

25. 6. 2012 Milan Suk PHP Žádný komentář 1423

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.



Aktuálně

  • 3. 6. 2013 - Nový vzhled webu

Code Snippety

Komentáře

Statistiky

  • TOPlist