3. díl - 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

V minulém dílu seriálu tutoriálů se základy PHP jsme si zprovoznili vše potřebné k tomu, abychom v PHP mohli programovat. V dnešním dí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:

Datové typy proměnných v PHP

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:

Obsah kruhu v PHP

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:

30

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:

Textové řetězce v PHP

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 příště, kdy si uvedeme pole.


 

Stáhnout

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

 

  Aktivity (3)

Článek pro vás napsal David Čápka
Avatar
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 se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Celkem (41 hlasů) :
4.878034.878034.878034.878034.87803


 



 

 

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

Avatar
patrikbraborec:

Dobrý tutoriál! :-)

Odpovědět 21.7.2015 11:40
To nejcennější, co všichni máme, je náš čas.
Avatar
Rasťo Suchovský:

Libor Šimo, echo <<<EOT, nefunguje to vôbec, stále berie zvyšok kódu ako text. Nič som neodsádzal písal som riadky, za každým riadkom som šupol Enter.
Píšem v NetBeans 8.1.
Nepochopil som syntax, môže niekto vysvetliť, prosím? Vďaka.

 
Odpovědět 22. ledna 22:36
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Rasťo Suchovský
Filip Šohajek:

U heredocu (<<<EOT) je nutné terminátor heredocu umístit s nulovým odsazením na nový řádek :

<?php
$hereDoc = <<<EOT
Text, který může obsahovat naprosto cokoliv.
EOT; // Toto je ta důležitá značka. I když je heredoc ve funkci, nesmí být odsazená a musí být na novém řádku zakončeným středníkem
 
Odpovědět 22. ledna 22:39
Avatar
Odpovídá na Filip Šohajek
Rasťo Suchovský:

Oh, díky, už som na to prišiel, díky. Si moc rýchly :D
Ono sa vyplatí čítať s porozumením, je to tu napísané, ale som to prehliadol. ;)

 
Odpovědět 22. ledna 22:48
Avatar
Jaroslav Janik:

Ahoj, jaky je rozdil mezi " " a ' ' ? Viz:

echo("Zde je spojeni retezcu A a B: $spojeni");
echo('A jeste jeden priklad: ');

Diky za vysvetleni :)

 
Odpovědět 27. května 9:55
Avatar
mayo505
Redaktor
Avatar
Odpovídá na Jaroslav Janik
mayo505:

Rozdiel je iba ten, že v dvojitých úvodzovkách môžeš použiť nejaké srandy ako napríklad premenné a keď nechceš tak si to musíš escapovať. V jednoduchých nemusíš okrem ' a \ escapovať nič, všetko čo je vo vnútri je brané ako čistý text

viac tu napr.
http://stackoverflow.com/…rings-in-php

 
Odpovědět 27. května 10:23
Avatar
Odpovídá na mayo505
Jaroslav Janik:

Diky moc, koukal jsem ze vysvetleni bylo hned v dalsim clanku :)

 
Odpovědět 27. května 10:29
Avatar
michal.cepelak:

Zdravím,
zkouším tento tutoriál ale při vytváření příkladu s proměnnýma mi nechce fungovat proměnná $obsah která je vložená v echo
takhle to mám napsáno:
<!doctype html>
<html>
<head>
<meta countent="tex­t/html; charset="utf-8">
<title>Dokument bez názvu</title>
</head>

<body>
<?php
$r = 10;
$obsah = 3.14 * $r * $r;
echo("Obsah kruju je $obsah cm2");
echo("jak $obsah ");
?>
</body>
</html>

a nevím co s tím :( není zapotřebí na toto nějak nastavit apache server?

Děkuji moc za radu.

 
Odpovědět 10. září 17:52
Avatar
Odpovídá na michal.cepelak
michal.cepelak:

Zdravím,
zkouším tento tutoriál ale při vytváření příkladu s proměnnýma mi nechce fungovat proměnná $obsah která je vložená v echo
takhle to mám napsáno:
<!doctype html>
<html>
<head>
<meta countent="tex­t/html; charset="utf-8">
<title>Dokument bez názvu</title>
</head>

<body>
<?php
$r = 10;
$obsah = 3.14 * $r * $r;
echo("Obsah kruju je $obsah cm2");
echo("jak $obsah ");
?>
</body>
</html>

a nevím co s tím :( není zapotřebí na toto nějak nastavit apache server?

Děkuji moc za radu.

Už to funguje neaktualizoval jsem data na serveru, omlouvám se.

 
Odpovědět 10. září 18:03
Avatar
Odpovídá na michal.cepelak
Martin McDermot:

Mě to funguje v poho co ten zápis přepsat $obsah = 3.14 * $r * $r;
jako $obsah = $r * $r *$pi;
a samozřejmě předtím si nadefinovat proměnou $pi = 3.14;

 
Odpovědět 21. listopadu 8:47
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 46. Zobrazit vše