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

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

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:

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


 

Stáhnout

Staženo 779x (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?
44 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 se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (5)

 

 

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

Avatar
Jaroslav Janik:27.5.2016 9:55

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.5.2016 9:55
Avatar
mayo505
Redaktor
Avatar
Odpovídá na Jaroslav Janik
mayo505:27.5.2016 10:23

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.5.2016 10:23
Avatar
Odpovídá na mayo505
Jaroslav Janik:27.5.2016 10:29

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

 
Odpovědět 27.5.2016 10:29
Avatar
michal.cepelak:10.9.2016 17:52

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.9.2016 17:52
Avatar
Odpovídá na michal.cepelak
michal.cepelak:10.9.2016 18:03

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.9.2016 18:03
Avatar
Odpovídá na michal.cepelak
Martin McDermot:21.11.2016 8:47

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.11.2016 8:47
Avatar
Zuzana Zahradnickova:28. ledna 16:44

Nevíte proč se mi nevypíše 30, ale jen $a = 10; $b = "20"; $c = $a + $b; echo($c); Něco dělám špatně a nevím co :o((

 
Odpovědět 28. ledna 16:44
Avatar
Odpovídá na Zuzana Zahradnickova
Marek Chalupa:28. ledna 17:52

Nevíme, možná kód by bylo super doložit ;-)

 
Odpovědět 28. ledna 17:52
Avatar
Michal Pavlíček:15. dubna 14:20

Prosím o pomoc, jaká je zkratka pro tyhle uvozovky: '', nikde jsem to nenašel, díky za odpověď.

 
Odpovědět 15. dubna 14:20
Avatar
Prizrak
Člen
Avatar
Odpovídá na Michal Pavlíček
Prizrak:17. dubna 22:55

Pravděpodobně, jsi to už zjistil, ale je to shift + ta klávesa o políčko naprava od L. :-)

 
Odpovědět 17. dubna 22:55
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 50. Zobrazit vše