PHP_02 - Větvení programu a funkce
1. Obsah
- Obsah
- Větvení programu
- Cykly
- Funkce require() a include()
- Uživatelem definované funkce
- Platnost proměnných
- Další vlastnosti PHP
- Úkol
- Zdroje a citace
2.Větvení programu
POZOR: Porovní v podmínkách je jinak než v Pascalu:
Operace | PHP | PASCAL |
---|---|---|
rovnost | == | = |
přiřazení | = | := |
if ($cislo == 0) echo "v proměnné $cislo je 0";
nebo
if ($cislo == 0) {
echo "v proměnné \$cislo je 0"; // vsimnete si escapovaci sekvence \$
}
případně aleternativní syntax (dříve pouřívaná)
<php if ($cislo == 0): ?>
v proměnné $cislo je 0 <!-- jedna se oklasicky HTML vystup!! -->
<?php endif; ?>
Příklad 2.2: - else
if ($cislo == 0) {
echo 'v proměnné $cislo je 0'; // zde neni potreba escapovaci sekvence \$ diky apostrofum!
}
else {
echo "v proměnné \$cislo není 0";
}
Příklad 2.3: - elseif
if ($cislo > 0) {
echo "$cislo je kladné";
}
elseif ($cislo < 0) {
echo "$cislo je záporné";
}
else {
echo "$cislo je 0";
}
Příklad 2.4: - switch
POZOR: nezapomínejte na brake
pro ukonceni stavu!
Switch ($cislo) {
case 1:
echo "proměnná \$cislo má hodnotu 1";
break;
case 2:
echo "proměnná \$cislo má hodnotu 2";
break;
case 3:
echo "proměnná \$cislo má hodnotu 3";
break;
case 4:
case 5:
echo "proměnná \$cislo má hodnotu 4 nebo 5";
break;
default:
echo "proměnná \$cislo má neznámnou hodnotu";
break;
}
Také lze použít interval:
switch ($totaltime) {
case ($totaltime < 1):
echo "To bylo rychlé!";
break;
case ($totaltime > 1):
echo "Ne příliš rychlé!";
break;
case ($totaltime > 10):
echo "Toto je tak pooooomalé...";
break;
}
Příklad 2.5: - Propojení klasického HTML s PHP
PHP můžete libovolně "zapínat" či "vypínat" na různých místech vašeho obyčejného HTML dokumentu, nesmíte ale zapomenout uzavřít všechny závorky a podobně.
<?php if ($cislo == 0) { ?>
<hr>
<h1>Test vypsání HTML kódu</h1>
<hr />
<?php } ?>
3. Cykly
Příklad 3.1: - while
Napíšem sloupec čísel 1 až 10
$i = 1;
while ($i <= 10) {
echo $i . "<br />";
$i++;
}
nebo starší (alternativní) způsob zápisu
$i = 1;
while ($i <= 10):
echo $i . "<br />";
$i++;
endwhile;
Příklad 3.2: - do-while (obdoba příkazu repeat z Pascalu)
Napíšem sloupec čísel 1 až 10
$i = 1;
do {
echo $i . "<br />";
$i++;
} while ($i <= 10);
Příklad 3.3: - for
Napíšem sloupec čísel 1 až 10
for ($i = 0; $i <= 10; $i++) {
echo $i . "<br />";
}
nebo starší (alternativní) způsob zápisu
for ($i = 0; $i <= 10; $i++) :
echo $i . "<br />";
endfor
V PHP má for
mnohem komplexnější užití a nastavení, než měl například for v Pascalu, tak si teď vypíšeme násobky čísla 3 a to od 10ti do 30ti.
for ($i = 10; $i <= 30; $i=$i+3) {
echo $i . "<br />";
}
Příklad 3.4: - foreach (slouží k procházení pole - Array
)
Napíšem sloupec A B C
$pole = Array(2=>"A", "B", "C");
foreach ($pole as $hodnota) {
echo $hodnota . "<br />";
}
Pokud potřebujeme znát i indexy (například u asociativního pole), lze foreach
rozšířit takto:
$pole = Array(2=>"A", "B", "C");
foreach ($pole as $index=>$hodnota) {
echo $index.': '.$hodnota . "<br />";
}
Vynucené ukončování cyklů:
break
ukončí provádění cyklu- chceme-li ukončit více vnořených cyklů použijeme
break
číslo continue
ukončí provádění příkazů v cyklu a pokračuje další iterací- chceme-li ukončit více vykonávanou sekci programu použijeme
exit
4. Funkce require() a include()
Příkazy se starají o přikompilování PHP skriptu zadaného v parametru. Pomocí tohoto mocného nástroje jste schopni decentralicovat velkou část vašeho projektu
a mít například menu vašich stránek v jednom jediném odděleném skriptu. Poté při přidání nové položky do menu nemusíte procházet všechny skripty, které obsahují menu
a ručně tam položku přidávat, ale stačí zdeitovat jen jeden skript menu.php
, tam položku přidat a změna se projeví na všech stránkach aší aplikace.
Příklad 4.1: - require a include
require("vlozit1.php");
include("vlozit2.php");
Pokud dojde k chybě při otvírání souboru zobrazí se varování.
- Při použití
require()
se skript ukončí. - Při použití
include()
skript pokračuje.
Příklad 4.2: - require_once a include_once
require_once("vlozit1.php");
include_once("vlozit2.php");
require("vlozit1.php");
include("vlozit2.php");
Pokud je použit příkaz s _once
, tak se hlídá opakované přilinkování toho stejného PHP skriptu a pokud již jednou byl k aplikaci
přikompilován, tak se znovu nekomiluje a nepoužije. Zamezí se tak například opakované deklaraci uživatelských funkcí, výkonnostním problémům aplikace a podobně.
Tento způsob přikomilovávání PHP skriptů by neměl být potřeba v čistě vašich aplikacích, ale pokud se na aplikaci podílí více autorů, či používáte rozšíření
třetích stran, tak se použiti require_once
či include_once
nejspíše nevyhnete - ale upozorňuji, že
tyto funkce významně přispívají k výkonnotním nárokům zvláště u větších aplikací, které obsahují tisíce a tisíce skriptů.
5. Uživatelem definované funkce
Příklad 5.1: - funkce bez parametrů
V PHP jsou jen funkce, žádné procedůry, ale funkce nemusí mít nutně návratovou hodnotu, která se vrací pomocí slovíčka return
.
function pozdrav_svet() {
echo "Ahoj světe";
}
Příklad 5.2: - funkce s parametry (povinnými)
function scitani($a, $b) {
return $a + $b; // promena nebo vyraz uvedeny za sluvkem return je vzdy navratova hodnota
// funkce muze o bsahovat nekolik vyrazu return v zavyslosti na
// vetveni funkce (napr. promoci if nebo switch)
}
Příklad 5.3: - funkce s nepovinnými parametry
Stačí parametru funkce přiřadit defaultní hodnotu, která se použije při nezavolání parametru.
function spoj_retezce($a, $b, $sMezerou = true) {
return (($sMezerou)?$a.' '.$b:$a.$b); // vzpominate si na ternalni opetator?
}
// pouziti funkce
echo spoj_retezce('Ahoj', 'svete'); // vsimtete si neni pouzit 3. parametr! Vypise se: Ahoj svete
echo spoj_retezce('Ahoj', 'svete', false); // vypise se: Ahojsvete
Příklad 5.4: - funkce s návratovou hodnotou v parametru
V Pascalu se před takový parametr uvádelo slůvko var a v PHP stačí uvést symbol & jak je vidět z příkladu 5.4.
function pridejNecoExtra(&$string) {
$string .= 'a neco extra.';
}
$ret = 'Toto je retezec, ';
pridejNecoExtra($ret);
echo $ret; // Vypise: 'Toto je retezec, a neco extra.'
echo pridejNecoExtra($ret); // nevypise nic! Ve funkce neni pouzoto return!
Další poznámky k funkcím:
- po
return
funkce končí - jako parametr lze použít
integer, double, string
a od verze PHP 5.4 iarray
aobject/class
- po vložení
exit
do těla funkce, funkce okamžitě končí - můžete definovat i funkce uvnitř funkce
- lze také použít rekurzivní volání funkcí
6. Platnost proměnných
- V PHP na rozdíl od jazyků jako Pascal nebo C, nejsou proměnné automaticky globální.
- Globální proměnnou ve funkci zapíšeme takto
global $promenna
. - Nebo použijeme asociativní pole
$GLOBALS['promenna']; // vsimete si chybejiciho $
. - Konstanty jsou vždy globální a nezačínají
$
, definují se taktodefine("deset", 10);
. - Chceme-li, aby se hodnota proměnné ve funkci inicializovala jen poprvé, použijeme ve funkci deklaraci
static $promenna = 0;
7. Další vlastnosti PHP
- Skript můžeme násilně ukončit funkcí
die()
nebo příkazemexit
. - POZOR po zavolání
die()
se již do prohlížeče nic nepošle a stránka není tudíž řádně ukončená. - Pokud potřebujeme do prohlížeče posílat data průběžně ne najednou az skript doběhne do konce, jak se to děje normálně, můžeme použít funkci
flush()
. Ale pozor, funkce není vždy 100% účinná, záleží na nastavení velikosti vyrovnavácí paměti webového serveru, funkce může být z výkonnostních důvodů zcela zakázána a podobně. - Funkce
eval(string $promenna)
vyhodnotí řetězec předaný v proměnné$promenna
jako PHP kód. K čemu je to dobré? Například bezpečné ošetření některých vstupů obsahujících z formulárů ve speciálních případech <?php a pod. Způsob použití je vidět na Příkladě 7.1.
Příklad 7.1: - eval
$a1 = 'echo "Ahoj svete";';
$a2 = '<?php echo "Ahoj svete"?>';
eval($a1); // vypise: Ahoj svete
eval($a2); // vypise: <?php echo "Ahoj svete"?>
8.Úkol
Napište formulář a php skript ukol02.php
, který vypočítá BMI index a napíše jak jste na tom:
BMI_index = hmotnost_v_kg/(vysma_v_metrech2)
Výšku měříme s přesností na 1 cm a hmotnost na 0,1 kg.
Pohlaví | Podváha | Přiměřená váha | Nadváha | Obezita |
---|---|---|---|---|
Muži | < 20 | 20 - 25 | 25 - 30 | > 30 |
Ženy | < 19 | 19 - 24 | 24 - 29 | > 29 |
Vzhled formuláře pro výpočet BMI, zkuste dodržet i formátování a barvy v CSS

9. Zdroje a citace
- ACHOUR, Mehdi, Friedhelm BETZ, Antony DOVGAL, Nuno LOPES, Hannes MAGNUSSON, Georg RICHTER, Damien SEGUY a Jakub VRÁNA. PHP: PHP Manual. [online]. [cit. 2012-08-21]. Dostupné z: www.php.net/manual/
- SWASHATA. Understand PHP eval: its Return values, syntax and usage. In: [online]. [cit. 2012-08-22]. Dostupné z: http://www.intechgrity.com/understanding-php-eval-function-and-usage-do-more-than-just-evaluating/
- VRÁNA, Jakub. Kniha 1001 tipů a triků pro PHP [online]. 1. vyd. 2010 [cit. 2012-08-21]. Dostupné z: http://php.vrana.cz/kniha-1001-tipu-a-triku-pro-php.php
- Poznámky neznámého učitele ze SPŠ Zlín :-)