PHP_02 - Větvení programu a funkce

1. Obsah

  1. Obsah
  2. Větvení programu
  3. Cykly
  4. Funkce require() a include()
  5. Uživatelem definované funkce
  6. Platnost proměnných
  7. Další vlastnosti PHP
  8. Úkol
  9. 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í = :=
Příklad 2.1: - if
    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ů:


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ří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:


6. Platnost proměnných


7. Další vlastnosti PHP

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.

Převodova tabulka
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

bmi

9. Zdroje a citace

  1. 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/
  2. 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/
  3. 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
  4. Poznámky neznámého učitele ze SPŠ Zlín :-)

HTML5 Powered with CSS3 / Styling, Device Access, Graphics, 3D & Effects, and Semantics
© Jan Wellech 2012, ver. 1.1