Lekce 3 - Proměnné a typový systém v PHP

PHP Základní konstrukce Proměnné a typový systém v PHP American English version English version

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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. V echu 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í.

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

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á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í.

Dnešní příklady máte ke stažení v příloze článku a já se na vás těším v příští lekci, Textové řetězce podruhé a pole v PHP, kdy si uvedeme pole.


 

Stáhnout

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

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
66 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 College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (9)

 

 

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

Avatar
Tomáš Janda:14.8.2017 7:15

Zdravím, jsem v tomto oboru úplný začátečník a nevím si rady s tím proč to nechce běžet:

<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php

$a = 10;
$b = 20;
$veta = "Ahoj, je mi";

$soucet = $a + $b;
$spojeni = $a . $b;

$hereDoc = <<<EOT
Zde je součet čísel A a B: $soucet

Zde je spojení řetězců A a B: $spojeni

A ještě jeden příklad: $veta $b let.
EOT;

?>
</body>
</html>

Když chci vyjet náhled jak to vypadá na serveru, tak mi to hodí tuto hlášku:
Parse error: syntax error, unexpected end of file in C:\xampp\htdoc­s\HelloWorld\in­dex.php on line 31

Odpovědět 14.8.2017 7:15
Trpělivost-vytrvalost-pokora
Avatar
WernerZero Gaming:28.8.2017 11:38

Alt+ô

 
Odpovědět 28.8.2017 11:38
Avatar
wartkor
Člen
Avatar
wartkor:12.12.2017 19:27

Ahoj mám takový menší problem když chci abz mi to ukazovalo jaký je den a měsíc. Ale mě to podle mého kódu nefunguje pošlete mi prosím správný kód předem děkuji. PS můj kód: <!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
echo("<?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>

Odpovědět 12.12.2017 19:27
Káždý jednou začal a neuspěl hned na poprvé
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:13.12.2017 15:02

Osobně si myslím že chyba bude v tom jak to vypisuješ:

echo("Ahoj, dnes je $den. $mesicSlovy $rok");

Dáváš tam do stringu proměnné což podle mě nemůže fungovat. String (řetězec) bych rozdělil resp. spojoval s proměnýma:

echo("Ahoj, dnes je ".$den.". ".$mesicSlovy." ".$rok");

Myslím že do stringu jsou vkládat proměnné ještě tímto způsobem ale za to ruku do ohně nedám:

echo("Ahoj, dnes je {$den}. {$mesicSlovy} {$rok}");
 
Odpovědět 13.12.2017 15:02
Avatar
Peter Sciranka
Redaktor
Avatar
Odpovídá na wartkor
Peter Sciranka:13.12.2017 15:19

Ahoj, uvediem len php ako má byť:

<?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");
?>

Ty tam máš ešte naviac za prvým php echo a ďalšie php, to robí problém. Daj vedieť, či som pomohl :)

Odpovědět 13.12.2017 15:19
Act as if it was Impossible to Fail
Avatar
wartkor
Člen
Avatar
Odpovídá na Peter Sciranka
wartkor:14.12.2017 16:17

Mě ani ten tvůj kód nefunguje skus poslat celý kód

Odpovědět 14.12.2017 16:17
Káždý jednou začal a neuspěl hned na poprvé
Avatar
Peter Sciranka
Redaktor
Avatar
Odpovídá na wartkor
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. února 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. února 23:00
Avatar
Radek Kopřiva:18. března 21:48

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

 
Odpovědět 18. března 21:48
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 60. Zobrazit vše