Lekce 5 - Proměnné a typový systém v PHP
V minulé lekci, Nastavení VS Code a Copilot pro PHP, jsme si nastavili Visual Studio Code pro práci s PHP, nainstalovali užitečná rozšíření a seznámili se s možnostmi AI asistenta GitHub Copilot.
V dnešním PHP tutoriálu si ukážeme základy syntaxe a práci s proměnnými.
Ještě předtím si na vytvoříme adresář, kam umístníme skripty z
dnešní lekce. Adresář pojmenujeme zaklady, a umístníme ho do
složky htdocs.
Cesta k adresáři na Windows bude tedy následující:
C:\xampp\htdocs\zaklady
PHP skript a HTML
Připomeňme si, že část stránky mezi značkami <?php a
?> se zpracuje jako PHP skript. Zkusme si to a použijme
příkaz echo, který do stránky vypíše nějaký text. Celý
tento PHP skript umístníme do HTML stránky. Zdrojový kód bude vypadat
takto:
<!DOCTYPE html>
<html lang="cs">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Echo</title>
</head>
<body>
<?php
echo("Tento text do stránky vložilo PHP");
?>
</body>
</html>
Soubor uložíme pod jménem index.php. Výsledek si můžeme
ověřit v prohlížeči na adrese http://localhost/zaklady/.
Uvidíme následující výsledek:
Zobrazený text vypsalo PHP a není pevnou součástí HTML stránky. Pokud se vám cokoli nepovedlo, můžete web zkoušet i přímo na hostingu, i když je to trochu nepohodlné. Projekt z této lekce naleznete pod článkem ke stažení. Můžete si tak najít případnou chybu.
Jak vidíme, soubor s příponou .php může obsahovat běžný
HTML kód stejně jako HTML stránka. Navíc do něj můžeme vkládat
PHP kód, který zapisujeme mezi značky <?php
a ?>. Při požadavku na stránku server tento PHP kód vykoná
a jeho případný výstup vloží na příslušné místo do výsledného HTML
dokumentu, který následně odešle prohlížeči.
Příkaz echo
Příkaz echo do stránky vypíše zadaný text.
echo je jazyková konstrukce, nikoli funkce.
Můžeme za něj napsat text v závorkách, jak jsme viděli v ukázce, nebo
závorky vynechat. U běžných funkcí naopak za jejich název píšeme
závorky, do kterých vložíme jejich vstupní parametry. I kdyby funkce ke
své úloze žádný parametr nepotřebovala, závorky musíme napsat, v tom
případě prázdné. PHP je na funkcích založené a nabízí jich poměrně
hodně. Většinu věcí si nemusíme programovat sami, ale prostě zavoláme
PHP funkci, která je vykoná. Namísto funkcí se dají používat i objekty, s
nimiž se zatím zatěžovat nebudeme, ale složitější aplikace bez nich
prakticky nelze vytvořit.
U příkazu echo lze závorky vynechat, ale u
běžných funkcí to nelze. Proto nám připadá přehlednější psát je
všude než je někde mít a někde nemít.
Příkazu echo předáváme text, který chceme vypsat. V
programování se textu říká textový řetězec, anglicky
string. Textové řetězce píšeme do uvozovek, ať už
jednoduchých, nebo dvojitých. Je to proto, aby si PHP text nepletlo s
ostatními příkazy. Když tedy napíšeme např.:
{PHP}
echo("echo");
{/PHP}
PHP ví, že druhé "echo" je jen text, a nebude si ho všímat
(vypíše prostě text echo). Za každým příkazem vždy
následuje středník. Příkazy píšeme na samostatné řádky. Syntaxe PHP
vychází z jazyka C, ve kterém je PHP mimochodem
naprogramované. Syntaxe se samozřejmě podobá i dalším jazykům, které z
jazyka C vycházejí, např. Javě nebo C#
.NET. Pokud tyto jazyky znáte, budete mít výhodu. Pokud ne, nemusíte
mít obavy, vše si zde vysvětlíme od začátku.
Na stránce, kterou vidí uživatel, již není po PHP ani památky. Obsahuje jen to, co PHP vygenerovalo. Uživatel se tedy ke zdrojovému kódu v PHP nikdy nedostane. HTML stránka, kterou vygeneroval skript výše, vypadá takto:
<!DOCTYPE html> <html lang="cs"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Echo</title> </head> <body> Tento text do stránky vložilo PHP </body> </html>
PHP tedy HTML nijak nenahrazuje, je to pouze prostředek k jeho generování. Obvykle máme nějakou HTML kostru, do níž dynamicky vkládáme obsah, který není předem známý a který se mění (např. komentáře v knize návštěv). Obsah se často načítá z nějaké databáze.
Příklad výše bychom však dokázali vytvořit i bez PHP, že? Pojďme do skriptu vložit nějakou dynamickou funkčnost.
Proměnné
Slovo proměnná byste měli znát ze školy. Pro neprogramátory je to
místo v paměti, kam si můžeme ukládat data a potom s nimi pracovat.
Proměnné pojmenováváme libovolným názvem bez mezer a diakritiky.
Povolenými znaky v názvech proměnných jsou velká a malá písmena anglické
abecedy, číslice a podtržítko (_). Názvy proměnných však
nesmějí začínat číslicí. Před jejich název vždy píšeme dolar
($).
Dolar na české klávesnici napíšeme pomocí pravého Alt a znaku ů:

Příkazy ukončujeme středníkem. Středník se na klávesnici nachází pod klávesou Esc:

Je dobrou praktikou pojmenovávat proměnné pomocí tzv. camelCase (velbloudí notací) v PHP. Pokud je v projektu typ snake_case (hadí notace, slova oddělená podtržítkem), je vhodné využívat tento typ stejný v celém projektu.
Uvnitř PHP části stránky si vytvoříme několik proměnných a naplníme je různými hodnotami:
$pozdrav = "Ahoj"; $vek = 15; $pi = 3.14;
Všimněme si, že se proměnné vždy jmenují podle toho, co je v nich
uloženo. Není nic horšího než uložit např. věk do proměnné
$a, pozdrav do $b a podobně. Ve svých skriptech
byste se za chvíli nevyznali. Naopak pokud máme dvě čísla a pojmenujeme je
$a a $b, je to v pořádku. Obsah nějaké proměnné
můžeme samozřejmě jednoduše vypsat pomocí příkazu echo.
V následující ukázce použijeme apostrof. Na české klávesnici ho píšeme pomocí kombinace klávesy Shift a klávesy vedle Enter (u některých klávesnic se nachází nad Enter, u jiných před ním):

Upravme náš kód:
{PHP}
$pozdrav = "Ahoj";
$vek = 15;
$pi = 3.14;
echo($pozdrav);
echo('<br />');
echo($vek);
echo('<br />');
echo($pi);
echo('<br />');
{/PHP}
Uvidíme následující výstup:
Určitě jste si všimli, že do uvozovek dáváme pouze text. Čísla a proměnné píšeme tak, jak jsou.
Datové typy
Každá proměnná je určitého typu. Těmto typům se říká datové. Ve
skriptu jsme si vytvořili proměnné tří základních datových typů.
Proměnná $pozdrav je typu string, o němž jsme si
již říkali. Proměnná $vek je typu int, což je
celé číslo. Proměnná $pi je potom typu double
(někdy můžeme narazit i na typ float). V PHP označují oba typy
totéž, tedy desetinné číslo.
PHP je tzv. dynamicky typovaný jazyk. To znamená, že datové typy nemusíme u proměnných zadávat (jako třeba v jazyce C), ale PHP si typ podle obsahu proměnné nastaví samo. Mezi typy také PHP samo převádí. Teoreticky bychom tedy ani nemuseli vědět o tom, že proměnná nějaký datový typ má. V praxi bychom se však potom mohli někdy docela divit, pokud by PHP samo převedlo něco tak, jak jsme to nečekali.
Sčítání čísel a spojování řetězců
V PHP můžeme mezi čísly samozřejmě používat základní početní operace, kulaté závorky a ostatní proměnné:
{PHP}
$r = 10;
$obsah = 3.14 * $r * $r;
echo("Obsah kruhu je $obsah cm<sup>2</sup>");
{/PHP}
Výstup:
Kód výše vytvoří proměnnou $r s hodnotou 10.
Tato hodnota se využije při zadávání obsahu proměnné $obsah.
Proměnná $obsah se vypíše spolu s dalším textem pomocí
příkazu echo.
Vidíme, že do řetězce můžeme jednoduše vložit i obsah proměnné. To
však funguje pouze s dvojitými uvozovkami, s jednoduchými by se vypsal
řetězec tak, jak je napsaný, a proměnná by se do něj nevložila. Horního
indexu u čtverečních centimetrů jsme dosáhli pomocí HTML tagu
<sup>. Poloměr by se v reálné aplikaci samozřejmě zadal
nějakým formulářem, aby měla aplikace nějaký význam. To ale zatím
neumíme.
Již jsme si říkali, že PHP samo převádí mezi různými datovými typy. Vyzkoušejme si to:
{PHP}
$a = 10;
$b = "20";
$c = $a + $b;
echo($c);
{/PHP}
Výstupem bude:
Ačkoli je proměnná $b zadána jako text, PHP ji převede na
číslo, jakmile zjistí, že proměnnou chceme k něčemu přičíst. Před
verzí PHP 8 bychom stejného výsledku dosáhli dokonce i s tímto
zadáním:
$a = 10; $b = "20 let mi je"; $c = $a + $b; echo($c);
Od verze PHP 8 však tento typ operace není považován za žádoucí. Ačkoli dojde k převodu textu na číslo a provedení výpočtu, je zároveň vyvoláno varování z důvodu provádění matematické operace s řetězcem, který obsahuje nenumerické znaky:
Stejně jako můžeme sčítat čísla, můžeme také spojovat textové
řetězce. Cizím slovem se tomu říká konkatenace (anglicky
concatenation nebo zkráceně concat). Slouží k tomu
operátor tečka (.):
{PHP}
$a = 10;
$b = 20;
$veta = "Ahoj, je mi";
$soucet = $a + $b;
$spojeni = $a . $b;
echo("Zde je součet čísel A a B: $soucet");
echo('<br />');
echo("Zde je spojení řetězců A a B: $spojeni");
echo('<br />');
echo('A ještě jeden příklad: ');
echo($veta . " " . $b . " let.");
{/PHP}
Výstup:
Z výstupu programu vidíme rozdíl mezi sčítáním čísel a spojováním řetězců. Všimněme si, že jsme stále v HTML. Pokud chceme nový řádek, jednoduše vložíme do stránky HTML tag pro odřádkování.
Pokud si nejsme jistí rozdílem mezi sčítáním a
spojováním řetězců, požádáme Copilota o vysvětlení.
Přiložíme ukázku s proměnnými $a, $b,
$soucet a $spojeni a zadáme prompt: "Vysvětli mi
krok za krokem, proč v tomto PHP kódu operátor + vrátí 30 a operátor
tečky vytvoří řetězec 1020. Kód neměň." Vysvětlení porovnáme s
výstupem naší ukázky.
Konstanty
Když již mluvíme o proměnných, měli bychom se zmínit i o konstantách. Konstanty, jak již jejich název napovídá, nejsou nic jiného než proměnné, jejichž hodnotu nemůžeme změnit poté, co ji jednou definujeme.
Před konstanty se na rozdíl od běžných proměnných nepíše znak dolaru
($) a vytváříme je pomocí funkce define(). Té
předáme jméno konstanty a její hodnotu.
Konstanty se často píšou velkými písmeny. Pokud jsou jejich názvy složeny z více slov, dává se mezi ně podtržítko. Důvodem je výraznější odlišení konstant od běžných proměnných.
Zkusme si nějakou konstantu založit. Jejím příkladem může být např.
verze aplikace, která se za běhu programu jen asi těžko změní
:
{PHP}
define('VERZE', 7.3);
echo('Verze aplikace: ' . VERZE);
{/PHP}
Jak je vidět, definovali jsme konstantu VERZE. Výstup:
Proč používat konstanty
Nejspíše se ptáte, proč vůbec konstanty používat, když se jejich hodnoty nemění. Důvody jsou hned dva:
- Více výskytů nějaké hodnoty – Představte si, že
napíšete účetní aplikaci a všude, kde se pracuje s DPH, použijete napevno
hodnotu
21. Následně však stát změní daň na 22 %. Co s tím? Celou aplikaci nyní musíte projít a všechna čísla21přepsat na22. Je jich ale tolik, že bohužel omylem změníte i věk, od kterého se mohou prodávat určité výrobky, protože byl náhodou také 21 let. Kdybyste jen hned ze začátku použili pro výpočet DPH všude v aplikaci jednu konstantu, stačilo by přepsat jediné číslo
- Přehlednost – Druhým důvodem k používání konstant je zpřehlednění kódu. Když se ke své aplikaci vrátíte měsíc poté, co jste ji naprogramovali, je velmi přínosné mít všechny konfigurační hodnoty na jednom místě na začátku programu spolu s vysvětlením, co nastavují. Např. verzi programu v našem příkladu hravě změníte na jeho prvním řádku a nemusíte si vzpomínat, kde že se vlastně verze vypisuje.
Některé poučky dokonce doporučují použít konstanty na všechny hodnoty, které zapisujeme přímo do kódu. My bychom nebyli tak radikální, ale užití konstant je určitě dobré zvážit.
Na závěr si můžeme zkusit, že hodnotu konstanty opravdu přepsat nelze. Kód níže vyvolá chybu:
{PHP}
// Tento kód vyvolá chybu
define('VERZE', 7.3);
VERZE = 7.4;
{/PHP}
Výstup:
Shrnutí lekce
PHP kód se vkládá do HTML stránky mezi značky <?php a
?> a jednotlivé příkazy se ukončují středníkem. Text do
stránky vypisuje příkaz echo. Proměnné začínají znakem
$, slouží k ukládání hodnot a PHP jim datový typ určuje
automaticky podle uložené hodnoty. Číselné hodnoty můžeme sčítat
operátorem +, textové řetězce spojujeme tečkou. Konstanty
uchovávají hodnoty, které se po definování nemají měnit, a zapisují se
pomocí funkce define(), například
define('SERVER', "localhost");.
V následujícím kvízu, Kvíz - Úvod do základů a proměnných v PHP, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorové řešení níže a porovnej ho se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 1426x (3.27 kB)
Příloha je včetně zdrojových souborů v jazyce PHP

David se informační technologie naučil na