September discount week
Pouze tento týden sleva až 80 % na e-learning týkající se MS Office
50 % bodů zdarma na online výuku díky naší Slevové akci!

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>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></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ř.:

echo("echo");

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>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></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. Před jejich název píšeme vždy dolar ($).

 Dolar na české klávesnici napíšeme pomocí pravého ALT a znaku ů:

Dolar

 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:

Středník

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;
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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áte 2 čísla a pojmenujete je $a a $b, je to v pořádku. Obsah nějaké proměnné můžeme samozřejmě jednoduše vypsat pomocí funkce echo(). Upravme náš kód:

$pozdrav = "Ahoj";
$vek = 15;
$pi = 3.14;
echo($pozdrav);
echo('<br />');
echo($vek);
echo('<br />');
echo($pi);
echo('<br />');

Měli byste vidět následující výstup:

Your page
localhost/Hello­World

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ů. Pozdrav je typu string, o tom jsme si již říkali. $vek je typu int, což je celé číslo. $pi je potom typu double (někdy můžete 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é:

$r = 10;
$obsah = 3.14 * $r * $r;
echo("Obsah kruhu je $obsah cm<sup>2</sup>");

Výstup:

Your page
localhost

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:

$a = 10;
$b = "20";
$c = $a + $b;
echo($c);

Výstupem bude:

Your page
localhost

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. Stejného výsledku bychom dokonce dosáhli i s tímto zadáním:

$a = 10;
$b = "20 let mi je";
$c = $a + $b;
echo($c);

To už je trochu divoké a rozhodně to nebudeme dělat.

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 (.):

$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.");

Výstup:

Your page
localhost

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

define('VERZE', 7.3);

echo('Verze aplikace: ' . VERZE);

Jak je vidět, definovali jsme dvě konstantu VERZE. Výstup:

Your page
localhost

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 čísla 21 přepsat na 22. 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:

// Tento kód vyvolá chybu
define('VERZE', 7.3);

VERZE = 7.4;

Výstup:

Your page
localhost

V příští lekci, Textové řetězce podruhé a pole v PHP, se naučíme zadávat textové řetězce různými způsoby a uvedeme si pole.


 

Stáhnout

Staženo 1055x (710 B)
Aplikace je včetně zdrojových kódů v jazyce php

 

Předchozí článek
Instalace Apache, MySQL a PHP na Windows a první PHP skript
Všechny články v sekci
Základní konstrukce jazyka PHP
Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
81 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn university Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (24)

 

 

Komentáře
Zobrazit starší komentáře (56)

Avatar
Peter Sciranka
Redaktor
Avatar
Peter Sciranka:14.12.2017 16:24

Na prianie posielam celý kód :)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>PHP skúśka</title>
</head>
<body>
<?php
$mesice = array('leden', 'únor', 'březen', 'duben', 'květen', 'červen',
'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec');
$den = date('j');
$mesic = date('m');
$mesicSlovy = $mesice[$mesic - 1];
$rok = date('Y');
echo("Ahoj, dnes je $den. $mesicSlovy $rok");
?>
</body>
</html>

Mne to funguje. Ešte skontrolu či súbor máš uložený ako index.php, dôležitá je prípona (.php).
Iné php súbory ti inak fungujú v poriadku?

Editováno 14.12.2017 16:27
Odpovědět
14.12.2017 16:24
Act as if it was Impossible to Fail
Avatar
Lasvit
Člen
Avatar
Lasvit:15.12.2017 9:38

Hodilo by se vědět, proč ti nefunguje ;)

 
Odpovědět
15.12.2017 9:38
Avatar
Milan Marek
Člen
Avatar
Milan Marek:23.2.2018 23:00

Tome, když to co chceš vypsat na sklo, tak to musíš dát do echa. Text do dvojtých " " nebo jednotných uvozovek ' ' čísla nemusíš a na konci funkce musíš dát středník ; Jak bylo nahoře ještě napsáno, tak hodnota funkce se dává do kulatých závorek () a u echa tam být nemusí, přesto jsem ti je tam dal.
Programování je jako když čteš nějaký návod a musíš přitom tak i přemýšlet. Čte se to z vrchu dolů.

<?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 ("Zde je spojení řetězců A a B: $spojeni
");

echo ("A ještě jeden příklad: $veta $b let.
");
?>

 
Odpovědět
23.2.2018 23:00
Avatar
Radek Kopřiva:18.3.2018 21:48

Skvělý pochopitelný návod. Díky.

 
Odpovědět
18.3.2018 21:48
Avatar
Marty
Člen
Avatar
Marty:4.10.2018 21:46

Na HTML i PHP jsem dřív používal PSPad. A i když mi nezobrazoval chyby, dělalo se mi v něm dobře. Zrovna jsem z Javy přešel na PHP, takže jsem v NetBeansu jako doma, ale hned ze začátku mi tam nevyhovuje pár věcí.

Když jsem v PSPadu vložil do stránky obrázek, automaticky za mě vyplnil "povinné" atributy, aby byla stránka validní. V NetBeansu mi tohle dost chybí, je s tím pak práce. Navážu tím na další problém, když vložím tag <a> a do něj atribut target, sice se mi jako možný atribut zobrazí, ale pokud bych nevěděl, co může obsahovat (např. "_blank"), tak si to musím najít na netu, protože mi těch 5 možnosti nenabídne. Jak to?

Docela mě překvapuje, že tenhle nešvar je tam v takové (zdá se) vyspělé verzi. Zkoušel jsem i PhpStorm, ale to už mi ten NetBeans vyhovuje víc.
Vypadá to, že nějaký čas s tím budu muset bojovat, nebo zkrátka budu psát v PSPadu a na kontrolu to hodím NetBeansu.

Editováno 4.10.2018 21:47
 
Odpovědět
4.10.2018 21:46
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Miroslav Hrabovský:4.9.2019 13:12

Ahoj, zatím je to přehledný a srozumitelný. Jen tak dále......

 
Odpovědět
4.9.2019 13:12
Avatar
Nikola Tomášková:25.10.2019 14:17

Děkuji za super přehledné a srozumitelné návody! :)

Odpovědět
25.10.2019 14:17
Je čas z nemožného udělat možným.
Avatar
Nikola Tomášková:26.10.2019 11:07

Díky! :)

Odpovědět
26.10.2019 11:07
Je čas z nemožného udělat možným.
Avatar
Gina Jana Dvořáková:10. dubna 21:27

Ahoj. Nevím jestli popíšu dobře. Mám nainstalované PHPstorm a z tohoto tutoriálu Netbeans. V tutoriálu jsem se dostala k Ahoj, 15, 3.14, bohužel né dále, protože mi netbeans po kliknutí na zelenou šipečku play spustí PHPstorm a chce to po mě: PHP Interpreter is not configured: Please configure PHP Interpreter to use built-in web server. Takže jsem v koncích a nevím vůbec co dělat? :-( V angličtině bohužel nevynikám. Děkuji za rady, abych se mohla posunout dál. Kdyžtak se pokusím poslat screeny.

 
Odpovědět
10. dubna 21:27
Avatar
Gina Jana Dvořáková:12. dubna 10:43

Problém vyřešen. Neměla jsem v XAMPP dodělané spuštění jako správce, tudíž mi nefungovali starty u Apache a MySQL :-D A pomohl mi mladší bráška :-)

 
Odpovědět
12. dubna 10:43
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 66. Zobrazit vše