18. diel - Dátové typy v PHP
Vitajte u lekcie o dátových typoch v PHP. Dnes si zhrnieme dátové typy v PHP, ukážeme si, ako s nimi pracovať a v čom je to tak trochu iné od ostatných jazykov.
Dynamické typovanie
Prakticky alfa omega typov PHP. PHP totiž pre deklaráciu premenných nevyžaduje definíciu dátového typu, ale rozozná dátový typ z kontextu, v akom sme premennú použili. Teda ak do premennej vložíme string, PHP bude túto premennú považovať za premennú s dátovým typom string.
Z kontextu sa dátový typ rozpozná tiež pri operáciách, príkladom môže byť násobenie. Ak násobíme dve čísla, kedy jedno z nich je definované ako dátový typ float, potom oba operandy sú brané ako float a výsledok bude v typu float.
Pre začiatok teda vieme, že PHP definuje dátový typ podľa kontextu a my ako užívatelia nemusíme žiadny dátový typ presne definovať. Poďme si jednotlivé dátové typy viac priblížiť.
Dátové typy
Než budeme pokračovať, musíme si tiež ukázať, aké všetky dátové typy sú v PHP používané:
- string
- integer
- float
- Boolean
- array
- object
- null
Nižšie si ich všetky lepšie vysvetlíme.
String
String, alebo po slovensky textový reťazec, je dátový typ pre
text. Definovať ho môžeme vložením textu do apostrofov '
alebo
úvodzoviek "
. V prípade potreby môžeme text rozdeliť do
viacerých riadkov:
$string1 = "Já jsem string"; $string2 = 'Já jsem taky string';
Pre rôzne úpravy textu slúžia v PHP tzv. Reťazové funkcie, ktorých je naozaj veľa. Ich použitie a vysvetlenie môžeme nájsť v našom kurze o PHP funkciách.
Integer
Ďalšia dátový typ je integer, tiež nazývaný skrátene int a je to celočíselný formát. To znamená, že v ňom môžeme zapísať iba celé čísla bez desatinnej čiarky (v programovacích jazykoch sa používa bodka). Akákoľvek deklarácie premenné s číslom bez desatinnej čiarky je teda automaticky považovaná za int.
Pokiaľ ale vykonáme s takou premennou operáciu, ktorej výsledok je desatinné číslo, výsledok sa vypíše ako float. Rovnako tak, ak vykonáme operáciu, keď druhý operand bude v typu float, PHP nám vždy vráti float.
$var1 = 5 // proměnná je int $var2 = 2 // proměnná je také int $var3 = 5.0 // proměnná je typu float $var1/$var2 // int/int - výsledek se nám vrátí jako datový typ float $var1/$var3 // int/float - výsledek se nám také vrátí jako float, i když je výsledek celočíselná hodnota
Float
Teraz už ale k tomu stále spomínanému dátovému typu float. Je to typ údajov pre reálne čísla s plávajúcou desatinou čiarkou, podľa toho sa vlastne tiež volá.
V PHP desatinnú čiarku zapisujeme ako bodku, ako sme už spomenuli na začiatku lekcie:
$float = 1.23;
Ako už bolo vysvetlené vyššie, akákoľvek operácia s float nám vráti výsledok ako float.
Boolean
Boolean je od predchádzajúcich dátových typov odlišný. Je to tzv. Logická hodnota. Rozlišuje teda iba medzi hodnotami true (pravda) a false (nepravda). Ich písanie je tzv. Case-insensitive. To znamená, že ich môžeme napísať s akokoľvek veľkými či malými písmenami:
$var1 = tRue; // reprezentuje hodnotu true $var2 = fALSe; // reprezentuje hodnotu false
Najčastejšie sa boolean
využíva v podmienkach
(if
). Ak chceme porovnať logickú hodnotu a chceme
zaručiť pravdivosť dátového typu, musíme miesto
dvojitého rovná sa ==
použiť trojité rovná sa
===
. Takéto porovnania okrem ich hodnoty porovná aj ich dátové
typy. PHP totiž ako logické hodnoty považuje tiež 1 a
0. Takéto porovnanie by teda vyzeralo nejako takto:
if (1 == true){} // vyhodnoceno jako TRUE if (1 === true){} // vyhodnoceno jako FALSE
Array
Dostávame sa k zložitejším dátovým typom. Prvým z nich je
array čiže pole. Pole definujeme hranatými zátvorkami
[]
alebo pomocou funkcie array()
s hodnotami,
poprípade s ich indexy alebo kľúčmi.
Jednoduchý príklad pole môže vyzerať nejako takto:
$jmena = ["Karel", "Tomáš", "Lukáš"];
Vytvorili sme pole s menami troch kamarátov.
Pole je v PHP usporiadaná mapa kľúčov a ich hodnôt. Na rozdiel od iných jazykov, kde je pole iba súhrn hodnôt očíslovaných od 0 po konečne veľa, v PHP pracujú poľa trochu inak. Pre nás je dôležité to, že položky polia môžu mať rôzne dátové typy, nemusíme definovať dĺžku poľa a že nemusíme používať iba indexy pre prístup k jednotlivým položkám. Ako položky poľa môžu byť rôzne dátové typy, ako príklad môžeme použiť pole, do ktorého by sme ukladali vek a meno človeka.
Pokiaľ nešpecifikuje inak, pole v PHP sa vytvorí ako číslované pole s prvou položkou očíslovanú nulou. K druhej položke v poli (meno Tomáš) by sme pristupovali nasledovne:
$jmeno = $jmena[1];
Pre prístup k položkám ale nemusíme vždy používať indexy. Kľúče si môžeme definovať podľa seba a to buď ako int alebo ako string. Deklarácia nášho poľa teda môže vyzerať aj takto:
$pole = [ "první hodnota pole bez definovaného klíče", "jméno" => "druhá hodnota pole s klíčem jméno", 5 => 34 ];
Takto deklarovanej pole by pri výpise vyzeralo nasledovne:
array (size=3) 0 => string 'první hodnota pole' (length=19) 'jméno' => string 'druhá hodnota pole s indexem jméno' (length=36) 5 => int 34
Tomuto hovoríme asociatívne polia a to z dôvodu, že asociuje jednotlivé položky ku kľúčom.
Object
Ako ďalší dátový typ v PHP je tzv object alebo po slovensky objekt. Objekt je inštancia triedy. Môže mať funkcie, ktorým sa hovorí metódy a premenné ktorým sa hovorí vlastnosti. Jeho definícia a prístup k jeho vlastnostiam vyzerá takhle:
$bmw = new Auto("BMW řada 8"); $bmw->nazev;
To je všetko čo o objektoch potrebujete v túto chvíľu vedieť. Objektovo orientovanému programovania sa do hĺbky venujú ďalšej lekcie.
Null
Null je špeciálny dátový typ, ktorý môže mať len hodnotu
null
. Premenná typu null je premenná bez priradené
hodnoty. To znamená, že ak napríklad deklarujeme premennú, ale nepriradíte
ju hodnotu, nastaví sa automaticky hodnota null
.
Pretypovanie
Keď už je premenná deklarovaná s určitým typom údajov, môžeme ju stále pretypovať na iný typ údajov. Slúži nám k tomu prefixy v znení dátových typov:
- (Int), (integer) - Int
- (Bool), (boolean) - Boolean
- (Float), (double), (real) - Float
- (String) - String
- (Array) - Pole
- (Object) - Objekt
- (Unset) - Null
Prefixy sa použijú týmto spôsobom:
$int = 10; $string = (string) $int; // proměnná $string bude obsahovat text "10"
Pre ďalšie pretypovania medzi rôznymi dátovými typmi platia rôzne pravidlá. Tá sa dajú opäť prehľadnejšie dohľadať v PHP dokumentáciu a sú príliš obsiahlo tému pre túto lekciu.
Sčítanie a pridávanie
V PHP sa môžeme stretnúť, ako s klasickým matematickým sčítaním, tak
s tzv. Pridávaním. To znamená, že napríklad spojíme dva stringy. Pre
sčítanie sa používa operátor plus +
a pridávanie znak bodky
.
.
Ak použijeme sčítanie, obaja operandmi sa vyhodnotí ako čísla a pokúsi sa sčítať. Ak by sme sumarizáciu string a číslo, prebehne sčítanie na základe hodnoty daného stringu, pre podrobné vysvetlenie týchto zložitejších podmienok nám pomôže PHP dokumentácie.
Ak pridávame, teda používame bodku, prevedú sa čísla na string a "pridajú" sa ku stringu. Ukážeme si nejaké príklady sčítanie a pridávanie:
$a = 5 + "5 kluků" // 10 $b = 5 + 6.5 // 11.5 $c = "Ahoj"."světe" // "Ahojsvěte" $d = "Ahoj".5 // "Ahoj5"
Statické typovanie
Čo to? Statické typovanie? Vyššie v článku bolo síce spomenuté, že
PHP typu dátové typy dynamicky. Niekedy sa nám však môžu hodiť vlastnosti
statického typovanie od verzie PHP 7. Preto pri definovaní vlastností objektu
môžeme pridať dátový typ, ktorý táto vlastnosť bude mať. To sa nám
môže hodiť, ak vieme, že $object->produkty
má byť pole s
produktmi, a alebo že $object->cena
má byť vždy cena, takže
chceme použiť dátový typ float
.
V praxi by to vyzeralo nejako takto:
class Produkt { public int $id; public float $cena; public array $parametry; public boolean $vProdeji; }
Každý dátový typ sme definovali a ak budeme niekde v projekte získavať dáta od užívateľov, zaistíme si tým čiastočne aj to, že nám nepristane dáta iného dátového typu, aj keď toto by sme mali ošetrovať aj inde.
Od PHP 8.0 bude možné definovať aj viac dátových typov. To sa nám môže hodiť napríklad pri návratové hodnoty, tá by mohla byť buď true alebo chybová hláška. V takom prípade budeme môcť písať nasledujúce:
class Produkt { public boolean|string $message; }
V budúcej lekcii, Najčastejšie chyby PHP nováčikov - Vieš pomenovať premenné? , si ukážeme najčastejšie chyby začiatočníkov v PHP ohľadom pomenovanie premenných.