Lekce 3 - Proměnné a typový systém v PHP
V minulé lekci, Instalace Apache, MySQL a PHP na Windows a první PHP skript, jsme si zprovoznili vše potřebné k tomu, abychom v PHP mohli programovat.
V dnešním PHP tutoriálu si ukážeme základy syntaxe a práci s proměnnými.
echo()
Zrekapitulujme si ještě příklad z minula, který měl následující podobu:
<!DOCTYPE html>
<html lang="cs">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello world</title>
</head>
<body>
<?php
echo("Tento text do stránky vložilo PHP");
?>
</body>
</html>
Již víme, že PHP skript vypadá jako běžná HTML stránka. Jelikož má
však stránka příponu .php
, může obsahovat části označené
značkami (direktivou) <?php
a ?>
. Zde se může
nacházet kód, který na serveru spustí PHP modul. Na toto místo potom
vloží výsledek, který kód vygeneroval.
Příkaz echo()
do stránky vypíše zadaný text.
echo()
je funkce a za název každé funkce
píšeme závorky, do kterých vložíme její vstupní parametry. Pro
echo()
je parametrem text, který se má vypsat. I kdyby funkce
nepotřebovala ke své úloze žádný parametr, musíme tam napsat závorky, 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, se kterými se zatím zatěžovat nebudeme, ale složitější aplikace
bez nich prakticky nelze vytvořit. Na tento seriál navazuje několik
dalších, které potom tyto pokročilejší techniky vysvětlují.
Zrovna u funkce echo()
lze závorky vynechat, ale u
většiny jiných funkcí to nelze. Přijde mi přehlednější psát je všude,
než je někde mít a někde nemít.
Funkci echo()
předáváme v parametru text. 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 z toho důvodu, aby si PHP text nepletlo s ostatními příkazy. Když
tedy napíšeme např.:
{PHP}
echo("echo");
{/PHP}
PHP ví, že je to druhé "echo"
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 céčka, ve kterém je PHP mimochodem
naprogramované. Je samozřejmě podobná i dalším jazykům, co z céčka
vycházejí, např. Javě nebo C# .NET.
Pokud tyto jazyky znáte, budete mít výhodu. Pokud ne, vše si zde
vysvětlíme od začátku.
Ve 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>Hello World</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 které 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 udělat i bez PHP, že? Poď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 píšeme vždy dolar
($
).
Dolar na české klávesnici napíšeme pomocí pravého ALT a znaku ů:
Z minulé lekce je asi jasné, že příkazy končí středníkem. Středník se na klávesnici nachází pod klávesou Esc:
Je dobrou praktikou pojmenovávat proměnné tzv. camelCase (velbloudí notaci) 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ěte 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í funkce echo()
.
V následující ukázce použijeme apostrof. Na české klávesnici ho píšeme pomocí Shift a klávesy vedle Enter (u některých klávesnic je to klávesa 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řech základních datových typů.
Proměnná $pozdrav
je typu string
, o tom 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 to
samé, 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 nemusíme ani vědět o tom, že proměnná nějaký datový typ má, prakticky bychom se však někdy mohli docela divit, když 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 funkcí
echo()
.
Vidíte, že do řetězce můžeme jednoduše vložit i obsah proměnné.
Funguje to však 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 jí 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čkoliv 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 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ěte si, že jsme stále v HTML, pokud chceme nový řádek, vložíme do stránky prostě HTML tag pro odřádkování.
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íší 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, příkladem konstanty může být např. verze aplikace, která se za běhu aplikace asi jen 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 používat konstanty, 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 čísla21
př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 jí 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ě vypisuje.
Některé poučky dokonce udávají použít konstanty na všechny hodnoty, které zapisujete přímo do kódu. Asi bych nebyl 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:
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 vzorovou aplikaci níže a porovnej ji 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 1370x (1.68 kB)
Aplikace je včetně zdrojových kódů v jazyce PHP