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

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

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