Jazyk PHP

Jazyk PHP (Hypertext PreProcessor) je intepretovaný jazyk – zdrojový kód je přímo spouštěn virtuálním strojem PHP bez nutnosti kompilace do strojového kódu. To je výhoda pro vývojáře, protože je jejich zdrojový kód snadno přenositelný.

Jazyk PHP je celkem jednoduchý a je tedy zejména pro začínající programátory. Využívá se k vytváření menších až středních internetových aplikací, například osobních webů, blogů, e-shopů, wikipedií…

Web PHP s dokumentací se nachází na adrese www.php.net.

Psaní PHP skriptů

PHP skripty se běžně píší v textovém editoru (např. „PSPad“:[http://www.pspad.com/cz/) a ukládají na webový server do souborů s příponou .php. Pokud je PHP správně nastaveno, po zadání správné adresy požadovaného souboru je skript spuštěn a jeho výstup zobrazen v prohlížeči.

Začátek a konec PHP skriptu

Při zpracování souboru zpracuje interpreter PHP jen to, co se nachází mezi speciálními značkami <?php a ?>. Zbytek jednoduše ignoruje (pošle to na výstup tak, jak to je). To umožňuje jednoduše kombinovat kód PHP a HTML.

kód v jazyce PHP - Zobrazit

  1. ...HTML tagy...
  2. <?php
  3. // nějaký PHP skript
  4. ?>
  5. ...HTML tagy...
  6. <?php
  7. // další PHP skript
  8. ?>
  9. ...HTML tagy...

Hello World

kód v jazyce PHP - Zobrazit

  1. <?php echo "Hello World"; ?>

Proměnné

Proměnná je část paměti, se kterou může program během svého spuštění pracovat. Ukládáme do nich data, jako například čísla, řetězce, pole, instance tříd a další. Práce s proměnnými patří mezi základní operace každého programu. Ani PHP skripty nejsou výjimkou.

Základní datové typy

Narozdíl od jazyka C, C++, Java a podobných, nemají proměnné v PHP pevně určený (nadeklarovaný) typ. Do jedné proměnné lze uložit mnoho různých typů hodnot a ty lze dokonce za běhu programu střídat. Typy se tím pádem nikde neuvádějí – ani v deklaraci, ani v parametrech funkcí.

Zde jsou základní typy hodnot, které mohou být v proměnných uloženy:

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. $a = 1; // celé číslo
  4. $b = 3.14159265; // desetinné číslo
  5. $c = true; // logická hodnota
  6. $d = "Hello World"; // řetězec
  7. $e = array ($a, 2, 3); // pole
  8. $f = new Trida (); // instance třídy
  9. $g = null; // speciální hodnota "nic"
  10.  
  11. ?>
Zásady

I když je PHP velmi benevolentní, doporučuji se řídit dle následujících zá­sad:

  • proměnné vhodně pojmenujte (ani krátce, ani dlouze)
  • do jedné proměnné ukládejte pokud možno jen jeden typ hodnot
  • proměnné před použitím vždy inicializujte (nastavte jejich výchozí hodnotu)

Proč to vysvětluji? Je potřeba si uvědomit, jak zhruba fungují „střeva“ PHP a nesnažit se o zbytečné optimalizace tam, kde jich není třeba. Uvedené poznatky také využijete při psaní funkcí a procedur, kde se parametry chovají podobně jako reference.

Pole

Jednorozměrné pole je lineární, homogenní a sekvenční datová struktura – zjednodušeně řečeno tedy jakási kolekce prvků. Využívá se pro uložení většího množství dat stejného typu, zpravidla proto, aby je bylo možné zpracovat hromadně pomocí cyklu.

Prvky pole v PHP (podobně jako proměnné) nemusí být stejného typu. V jednom poli se tedy mohou nacházet čísla, řetězce, instance tříd a dokonce i další pole.

Inicializace

Pole se v jazyce PHP inicializuje takto:

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. // inicializace prázdného pole
  4. $pole = array ();
  5.  
  6. // inicializace pole s hodnotami
  7. $pole = array ("Jana", 21, 182.6);
  8.  
  9. // inicializace asociativního pole s hodnotami
  10. $pole = array ("jméno" => "Karel", "věk" => 22);
  11.  
  12. // inicializace míšeného pole s hodnotami
  13. $pole = array ("jméno" => "Eliška", 90, 60, 90);
  14.  
  15. // inicializace vnořeného pole
  16. $pole = array ("Thomas", array (177, 75), array ("kalhoty", "mikina", "triko"));
  17.  
  18. ?>

Nyní je možné s polem pracovat, například do něj vkládat prvky, odebírat je a měnit. Pole v PHP nemá pevně danou velikost, je tedy možné brát jej jako „pytel“, do kterého lze neomezeně sypat prakticky cokoliv. Příliš se nedoporučuje míchat asociativní a obyčejná pole, protože může vzniknout zmatek s indexy a klíči.

Vkládání prvků

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. // vkládání prvků do pole
  4. $pole = array ();
  5. $pole [] = "Marie";
  6. $pole [] = "Hana";
  7. $pole [] = 15.54532;
  8.  
  9. // vkládání prvků do asociativního pole
  10. $pole = array ();
  11. $pole ["klíč"] = "hodnota";
  12. $pole ["jiný klíč"] = "jiná hodnota";
  13. $pole [155] = "hodnota s číselným klíčem";
  14. $pole [-487.41] = "hodnota s podivným klíčem";
  15.  
  16. ?>
Přístup k prvkům

Každý prvek v poli má svůj index, který jej jednoznačně určuje. Indexy začínají od nuly. Pokud používáme pole asociativní, můžeme k prvkům navíc přistupovat pomocí jejich klíče.

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. // inicializace pole
  4. $pole = array ();
  5. $pole ["triko"] = "modrá";
  6. $pole ["čepice"] = "zelená";
  7. $pole ["mikina"] = "červená";
  8.  
  9. // vypsání modré
  10. echo $pole [0];
  11. echo $pole ["triko"];
  12.  
  13. // vypsání červené
  14. echo $pole [2];
  15. echo $pole ["mikina"];
  16.  
  17. ?>

Nikdy moc nemíchejte způsoby přístupu k prvkům, jinak vás čeká peklo. Zde je jeden odstrašující příklad pro představu:

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. $pole ["značka"] = "BMW";
  4. echo $pole [0]; // vypíše BMW
  5. $pole [0] = "Wartburg"; // nahradí BMW Wartburgem
  6. echo $pole [0]; // vypíše Wartburg
  7. $pole ["0"] = "Trabant"; // nahradí Wartburg Trabantem
  8. echo $pole [0]; // vypíše Trabant
  9.  
  10. ?>
Mazání prvků

V PHP obvykle není nutné cokoliv mazat, protože to za nás udělá virtuální stroj – ale někdy potřebujeme objekty odstraňovat kvůli určité funkcionalitě v aplikaci. Mazání provedeme pomocí speciálního konstruktu unset, který jako parametr vyžaduje prvek, který chceme odstranit.

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. // smaže první prvek pole
  4. unset ($pole [0]);
  5.  
  6. // smaže prvek s klíčem "admin"
  7. unset ($pole ["admin"]);
  8.  
  9. // smaže celé pole
  10. unset ($pole);
  11.  
  12. ?>

PHP – podmínky a cykly

V každém programovacím jazyce se můžeme setkat s podmínkami a cykly. Právě ty umožňují programu reagovat na dvě různé situace jinak a opakovaně provádět podobné operace nad velkým množstvím dat.

Podmínky

Podmínka je jazykový konstrukt, který na základě výsledku daného logického výrazu rozhoduje o provedení či přeskočení nějakého bloku příkazů. Ukážeme si pár jednoduchých příkladů.

Podmínka začíná klíčovým slovem if.

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. // jeden příkaz není nutné uzavírat do bloku
  4.  
  5. if ($a == 0) echo "A je nula";
  6.  
  7. // více příkazů se uzavře do bloku
  8.  
  9. if ($a == 0)
  10. {
  11.   echo "Pozor...";
  12.   echo "A je nula";
  13. }
  14.  
  15. ?>

Klíčové slovo else umožňuje programu reagovat i na situace, kdy podmínka splněna není.

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. if ($hodina > 6 && $hodina < 15)
  4. {
  5.   echo "Jsem v práci.";
  6.   echo "Dnes toho mám opravdu hodně.";
  7. }
  8. else
  9. {
  10.   echo "Jsem nejspíš doma.";
  11. }
  12.  
  13. ?>

Následující příklad ukazuje vnoření podmínek do sebe a také zjednodušení pomocí speciálního klíčového slova elseif.

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. $a = 42;
  4.  
  5. // první možnost (if, else)
  6.  
  7. if ($a == 0)
  8. {
  9.   echo "číslo A je nulové";
  10. }
  11. else
  12. {
  13.   if ($a % 2 == 1)
  14.   {
  15.     echo "číslo A je liché";
  16.   }
  17.   else
  18.   {
  19.     echo "číslo A je sudé";
  20.   }
  21. }
  22.  
  23. // druhá možnost (if, else, elseif)
  24.  
  25. if ($a == 0)
  26. {
  27.   echo "číslo A je nulové";
  28. }
  29. elseif ($a % 2 == 1)
  30. {
  31.   echo "číslo A je liché";
  32. }
  33. else
  34. {
  35.   echo "číslo A je sudé";
  36. }
  37.  
  38. ?>
Switch

Jazykový konstrukt switch v určitých případech velmi zjednodušuje zápis algoritmu. Jedná se o rozhodovací mechanismus, který vyhodnotí výraz a skočí na ten řádek, který je výslednou hodnotou označen (case). Od tohoto řádku dál vykoná program všechny příkazy, dokud nenarazí na klíčové slovo break (může tedy „přejet“ i na další case). Pokud hodnota neodpovídá ani jednomu případu, skočí se na nepovinný výchozí příkaz (default).

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. $jmeno = "Iva";
  4.  
  5. switch ($jmeno)
  6. {
  7.   case "Julie":
  8.   case "Iva":
  9.   case "Pavla":
  10.     echo "Ahoj kočko!";
  11.     break;
  12.   case "Petr":
  13.   case "Mirek":
  14.     echo "Zdar, jdeme na jedno?";
  15.     break;
  16.   default:
  17.     echo "Sorry, neznám tě.";
  18.     break;
  19. }
  20.  
  21. ?>
Cyklus WHILE (s podmínkou na začátku)

Syntaxe: while (výraz) {příkazy}

Cyklus while je nejjednodušším cyklem v PHP. Na začátku každé iterace je nejprve vyhodnocen výraz v příkazu while. Je-li výsledek roven TRUE, provede se vnořený blok příkazů a je spuštěna další iterace. Pokud je výraz již před začátkem první iterace roven FALSE, vnořený blok se neprovede vůbec.

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. $a = 10;
  4. while ($a > 0)
  5. {
  6.   echo $a . "...";
  7.   $a--;
  8. }
  9.  
  10. ?>
Cyklus DO WHILE (s podmínkou na konci)

Syntaxe: do {příkazy} while (výraz)

Cyklus do while je velmi podobný cyklu while, ale narozdíl od něj je výraz v příkazu while vyhodnocován až na konci každé iterace. Je tedy zaručeno, že se vnořený blok příkazů provede vždy alespoň jednou.

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. $a = 10;
  4. do {
  5.   echo $a . "...";
  6.   $a--;
  7. } while ($a > 0);
  8.  
  9. ?>
Cyklus FOR

Syntaxe: for (výraz1; výraz2; výraz3) {příkazy}

Cyklus for je nejsložitějším cyklem v PHP. Skládá se ze tří výrazů:

  • výraz1 se provede vždy před první iterací
  • výraz2 se vyhodnotí před každou iterací – pokud je roven FALSE, cyklus skončí
  • výraz3 se provede na konci každé iterace

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. for ($i = 0; $i < 10; $i++)
  4. {
  5.   echo $i . '. Už tam budeme?<br />';
  6. }
  7.  
  8. ?>
Příkazy BREAK a CONTINUE

V cyklech je možné použít příkazy break a continue. Jejich význam je následující:

  • break – okamžitě ukonči iteraci a vyskoč z cyklu
  • continue – okamžitě ukonči iteraci, vyhodnoť logický výraz a pokud je roven TRUE, začni novou iteraci

Následující příklad ukazuje použití příkazů break a continue.

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. $i = 0;
  4. while (true)
  5. {
  6.   // pokud je číslo moc vysoké, ukonči cyklus
  7.   if ($i > 10000) break;
  8.  
  9.   // přeskočit všechna sudá čísla
  10.   if ($i % 2 == 0) continue;
  11.  
  12.   // vypsat číslo
  13.   echo $i . "...";
  14.  
  15.   // inkrementovat
  16.   $i++;
  17. }
  18.  
  19. ?>

Funkce a procedury

Funkce a procedury jsou základními stavebními bloky strukturovaných programů. Kód, který se opakuje na více místech, je dobré prohlásit za samostatný podprogram a ten na odpovídajících místech pouze spustit – zavolat.

Lepší struktura kódu umožňuje dosahovat více úrovní abstrakce a klade tak menší požadavky na paměť programátora. Celý tento proces by se dal přirovnat k matematické substituci.

Funkce a procedury pomáhají zpřehlednit kód, zvýšit modularitu a tak usnadnit údržbu i rozšiřování programu.

Rozdíl mezi funkcí a procedurou je pouze formální – procedura nevrací žádnou hodnotu, zatímco funkce ano. V PHP je tento rozdíl nepodstatný, funkce i procedury se deklarují i volají stejně. Proto se v dalším textu bude vyskytovat pojem funkce, neboť je obecnější.

Funkce mohou být volány s parametry – hodnotami, které ovlivňují její průběh. Počet parametrů je pro každou funkci pevně daný. Funkce je před použitím nutné nadeklarovat – tedy definovat již zmíněné parametry a tělo funkce – tedy program, který se provede po jejím zavolání.

Deklarace funkcí

Funkce se deklaruje takto:

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. function pozdrav ()
  4. {
  5.   echo "ahoj";
  6. }
  7.  
  8. ?>

Funkce se dvěma parametry a návratovou hodnotu takto:

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. function prumer ($a, $b)
  4. {
  5.   return ($a + $b) / 2;
  6. }
  7.  
  8. ?>
Volání funkcí

Funkce bez parametrů se volá takto:

kód v jazyce PHP - Zobrazit

  1. <?php pozdrav (); ?>

A funkce s parametry takto:

kód v jazyce PHP - Zobrazit

  1. <?php $c = prumer ($a, $b); ?>

Návratovou hodnotu funkce lze dokonce ignorovat (není to však známka špatného kódu?):

kód v jazyce PHP - Zobrazit

  1. <?php prumer ($a, $b); ?>
Věstavěné funkce

Jádro PHP spolu s moduly obsahuje velké množství věstavěných funkcí. Jejich seznam naleznete na webu PHP. Je lepší používat tyto funkce než si ke stejným účelům programovat vlastní, protože jsou optimalizované a podobně jako virtuální stroj zkompilované do strojového kódu.

Výrazy

Výrazem rozumíme syntakticky správnou posloupnost operandů a operátorů, která zpravidla vrací nějaký výsledek. Příkladem výrazu může být matematický výraz, logický výraz (vrací výsledek) nebo volání funkce (vrací návratovou hodnotu).

Matematické výrazy se používají všude tam, kde chceme něco vypočítat. Logické výrazy využijeme především v podmínkách.

Matematické výrazy

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. $a = 3.14 * 5.5 * 5.5 * 8;
  4. $b = (150 - $a + 44) / (487 * $a);
  5. $c = (($a * $b) - 150) % 100;
  6. $d = ($a + $b + $c) / 3;
  7.  
  8. ?>
Matematické operátory
Příklad Operace
-$a opačná hodnota k $a
$a + $b součet $a a $b
$a – $b rozdíl $a a $b
$a * $b součin $a a $b
$a / $b podíl $a a $b
$a % $b zbytek z $a po dělení $b
Logické výrazy

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. $yes = true;
  4. $no = false;
  5. $answer = ((5 < 10) && ($no || ! $yes) != $no);
  6.  
  7. ?>
Logické operátory
Příklad Operace
! $a negace $a
$a and $b $a a zároveň $b
$a or $b $a nebo $b
$a xor $b $a nebo $b, ale ne zároveň
$a && $b $a a zároveň $b
$a || $b $a nebo $b

Rozdíl mezi operátory and, or a &&, || je v prioritě vyhodnocování.

kód v jazyce PHP - Zobrazit

  1. <?php
  2.  
  3. $a = false || true; // $a bude true, dříve se vyhodnotí pravá strana
  4. $b = false or true; // $b bude false, dříve se vyhodnotí levá strana
  5.  
  6. ?>
Porovnávací operátory
Příklad Operace
$a == $b $a rovná se $b
$a === $b $a je identické s $b (stejná hodnota, stejný typ)
$a != $b $a je různé od $b
$a <> $b $a je různé od $b
$a !== $b $a není identické s $b (různá hodnota nebo jiný typ)
$a < $b $a je menší než $b
$a <= $b $a je menší nebo rovno $b
$a > $b $a je větší než $b
$a >= $b $a je větší nebo rovno než $b

Reference