Hledáme fulltime PHP programátora do ITnetwork týmu - 100% homeoffice, 100% časově flexibilní #bezdeadlinu Mám zájem!
Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij slevové akce 50% výuky zdarma!
JavaScript týden

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 1102x (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?
83 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 13 let. Má rád Nirvanu, sushi a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (27)

 

 

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

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
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.4.2020 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.4.2020 21:27
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Gina Jana Dvořáková:12.4.2020 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.4.2020 10:43
Avatar
Pavel Kubalík:8.11.2020 15:35

Dobrý den
To je můj první den v kurzu PHP
Zatím to jde. Je to srozumitelně vyloženo. Uvidíme. Těším se.
Děkuji PK

 
Odpovědět
8.11.2020 15:35
Avatar
Lucie
Člen
Avatar
Lucie:22. ledna 11:10

Ahoj,
článek je napsaný suprově bohužel jsem se daleko nedostala :-( .

1. úkol:

<?php
      echo("Tento text do stránky vložilo PHP");
    ?>

Byl naprosto v pořádku.
echo("text"); jsem smazala a zadala druhý úkol:

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
     $pozdrav = "Ahoj";
     $vek = "15";
     $pi = "3.14";
     echo ($pozdrav);
     echo ('<br />');
     echo ($vek);
     echo ('<br />');
     echo ($pi);
     echo ('<br />');
        ?>
    </body>
</html>

když dám "RUN" tak se mi zobrazuje jen a pouze výsledek 1. úkolu který v příkazu nemám.
Jsem úplný začátečník a nevím čím to může být :-).
Mám: Win 10 PRO 64-bit aktualizovaný 20H2, NetBeans 12.2, XAMPP 7.4.12, JDK 15.0.2, Firefox 84.0.2
Poradí někdo prosím :-)

 
Odpovědět
22. ledna 11:10
Avatar
Lucie
Člen
Avatar
Odpovídá na Lucie
Lucie:22. ledna 11:32

Omlouvám se za spam :-D , asi jsem si na to přišla.
Musím stále pokračovat v projektu typu Index jakmile si projekt uložím a nějak pojmenuji tak to zlobí viz výše. Pro představu přikládám obrázek kdyby měl někdy někdo podobný problém :-D

 
Odpovědět
22. ledna 11:32
Avatar
Vladimír Beneš:12. února 21:22

Díky, klucí, dooost dobrý. Jdu dál

 
Odpovědět
12. února 21:22
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 70. Zobrazit vše