BLACK FRIDAY! Slevy až 80 % jsou všude. Tak je nepropásni a přejdi do rostoucího IT oboru!
BF Sales

Lekce 18 - Datové typy v PHP

V minulé lekci, Pokročilá konfigurace PHP (XAMPP), jsme se naučili konfigurovat PHP (XAMPP) pro lokální vývoj reálných projektů, zprovoznili jsme si subdomény, odesílání emailů a import velkých MySQL souborů.

Vítejte u lekce o datových typech v PHP. Dnes si shrneme datové typy v PHP, ukážeme si, jak s nimi pracovat a v čem je to tak trochu jiné od ostatních jazyků.

Dynamické typování

Prakticky alfa omega datových typů v PHP. PHP totiž pro deklaraci proměnných nevyžaduje definici datového typu, ale rozezná datový typ z kontextu, v jakém jsme proměnnou použili. Tedy pokud do proměnné vložíme string, PHP bude tuto proměnnou považovat za proměnnou s datovým typem string.

Z kontextu se datový typ rozpozná také při operacích, příkladem může být násobení. Pokud násobíme dvě čísla, kdy jedno z nich je definované jako datový typ float, poté oba operandy jsou brané jako float a výsledek bude v typu float.

Pro začátek tedy víme, že PHP definuje datový typ podle kontextu a my jako uživatelé nemusíme žádný datový typ přesně definovat. Pojďme si jednotlivé datové typy více přiblížit.

Datové typy

Než budeme pokračovat, musíme si také ukázat, jaké všechny datové typy jsou v PHP používané:

  • String
  • Integer
  • Float
  • Boolean
  • Array
  • Object
  • Null

Níže si je všechny lépe vysvětlíme.

String

String, neboli česky textový řetězec, je datový typ pro text. Definovat jej můžeme vložením textu do apostrofů ' nebo uvozovek ". V případě potřeby můžeme text rozdělit do více řádků:

$string1 = "Já jsem string";
$string2 = 'Já jsem
taky string';

Pro různé úpravy textu slouží v PHP tzv. řetězové funkce, kterých je opravdu mnoho. Jejich použití a vysvětlení můžeme nalézt v našem kurzu o PHP funkcích.

Integer

Další datový typ je integer, také nazýván zkráceně int a je to celočíselný formát. To znamená, že v něm můžeme zapsat pouze celá čísla bez desetinné čárky (v programovacích jazycích se používá tečka). Jakákoliv deklarace proměnné s číslem bez desetinné čárky je tedy automaticky považována za int.

Pokud ale provedeme s takovou proměnnou operaci, jejíž výsledek je desetinné číslo, výsledek se vypíše jako float. Stejně tak, pokud provedeme operaci, kdy druhý operand bude v typu float, PHP nám vždy vrátí 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

Nyní už ale k tomu stále zmiňovanému datovému typu float. Je to datový typ pro reálná čísla s plovoucí desetinou čárkou, podle toho se vlastně také jmenuje.

V PHP desetinnou čárku zapisujeme jako tečku, jak jsme již zmínili na začátku lekce:

$float = 1.23;
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Jak už bylo vysvětleno výše, jakákoliv operace s float nám vrátí výsledek jako float.

Boolean

Boolean je od předchozích datových typů odlišný. Je to tzv. logická hodnota. Rozlišuje tedy pouze mezi hodnotami true (pravda) a false (nepravda). Jejich psaní je tzv. case-insensitive. To znamená, že je můžeme napsat s jakkoliv velkými či malými písmeny:

$var1 = tRue;  // reprezentuje hodnotu true
$var2 = fALSe; // reprezentuje hodnotu false

Nejčastěji se boolean využívá v podmínkách (if). Pokud chceme porovnat logickou hodnotu a chceme zaručit pravdivost datového typu, musíme místo dvojitého rovnítka == použít trojité rovnítka ===. Takové porovnání kromě jejich hodnoty porovná i jejich datové typy. PHP totiž jako logické hodnoty považuje také 1 a 0. Takové porovnání by tedy vypadalo nějak takto:

if (1 == true){}  // vyhodnoceno jako TRUE
if (1 === true){} // vyhodnoceno jako FALSE

Array

Dostáváme se ke složitějším datovým typům. Prvním z nich je array neboli pole. Pole definujeme hranatými závorkami [] nebo pomocí funkce array() s hodnotami, popřípadě s jejich indexy nebo klíči.

Jednoduchý příklad pole může vypadat nějak takto:

$jmena = ["Karel", "Tomáš", "Lukáš"];

Vytvořili jsme pole se jmény tří kamarádů.

Pole je v PHP uspořádaná mapa klíčů a jejich hodnot. Na rozdíl od jiných jazyků, kde je pole pouze souhrn hodnot očíslovaných od 0 po konečně mnoho, v PHP pracují pole trochu jinak. Pro nás je důležité to, že položky pole mohou mít různé datové typy, nemusíme definovat délku pole a že nemusíme používat pouze indexy pro přístup k jednotlivým položkám. Jako položky pole můžou být různé datové typy, jako příklad můžeme použít pole, do kterého bychom ukládali věk a jméno člověka.

Pokud nespecifikujeme jinak, pole v PHP se vytvoří jako číslované pole s první položkou očíslovanou nulou. K druhé položce v poli (jméno Tomáš) bychom přistupovali následovně:

$jmeno = $jmena[1];

Pro přístup k položkám ale nemusíme vždy používat indexy. Klíče si můžeme definovat podle sebe a to buď jako int nebo jako string. Deklarace našeho pole tedy může vypadat i takto:

$pole = [
       "první hodnota pole bez definovaného klíče",
       "jméno" => "druhá hodnota pole s klíčem jméno",
       5 => 34
    ];

Takto deklarované pole by při výpisu vypadalo následovně:

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 říkáme asociativní pole a to z důvodu, že asociujeme jednotlivé položky ke klíčům.

Object

Jako další datový typ v PHP je tzv object neboli česky objekt. Objekt je instance třídy. Může mít funkce, kterým se říká metody a proměnné kterým se říká vlastnosti. Jeho definice a přístup k jeho vlastnostem vypadá takhle:

$bmw = new Auto("BMW řada 8");
$bmw->nazev;

To je vše co o objektech potřebujete v tuto chvíli vědět. Objektově orientovanému programování se do hloubky věnují další lekce.

Null

Null je speciální datový typ, který může mít pouze hodnotu null. Proměnná typu null je proměnná bez přiřazené hodnoty. To znamená, že pokud například deklarujeme proměnnou, ale nepřiřadíme ji hodnotu, nastaví se automaticky hodnota null.

Přetypování

Když už je proměnná deklarovaná s určitým datovým typem, můžeme ji stále přetypovat na jiný datový typ. Slouží nám k tomu prefixy ve znění datových typů:

  • (int), (integer) - Int
  • (bool), (boolean) - Boolean
  • (float), (double), (real) - Float
  • (string) - String
  • (array) - Pole
  • (object) - Objekt
  • (unset) - Null

Prefixy se použijí tímto způsobem:

$int = 10;
$string = (string) $int; // proměnná $string bude obsahovat text "10"

Pro další přetypování mezi různými datovými typy platí různá pravidla. Ta se dají opět přehledněji dohledat v PHP dokumentaci a jsou příliš obsáhle téma pro tuto lekci.

Sčítání a přidávání

V PHP se můžeme setkat, jak s klasickým matematickým sčítáním, tak s tzv. přidáváním. To znamená, že například spojíme dva stringy. Pro sčítání se používá operátor plus + a přidávání znak tečky ..

Pokud použijeme sčítání, oba operandy se vyhodnotí jako čísla a pokusí se sečíst. Pokud bychom sčítali string a číslo, proběhne sčítání na základě hodnoty daného stringu, pro podrobné vysvětlení těchto složitějších podmínek nám pomůže PHP dokumentace .

Pokud přidáváme, tedy používáme tečku, převedou se čísla na string a "přidají" se ke stringu. Ukážeme si nějaké příklady sčítání a přidávání:

$a = 5 + "5 kluků"  // 10
$b = 5 + 6.5        // 11.5
$c = "Ahoj"."světe" // "Ahojsvěte"
$d = "Ahoj".5       // "Ahoj5"

Statické typování

Co to? Statické typování? Výše v článku bylo sice zmíněno, že PHP typuje datové typy dynamicky. Někdy se nám však můžou hodit vlastnosti statického typování od verze PHP 7. Proto při definici vlastností objektu můžeme přidat datový typ, který tato vlastnost bude mít. To se nám může hodit, pokud víme, že $object->produkty má být pole s produkty, a nebo že $object->cena má být vždy cena, takže chceme použít datový typ float.

V praxi by to vypadalo nějak takto:

class Produkt {
  public int $id;
  public float $cena;
  public array $parametry;
  public boolean $vProdeji;
}

Každý datový typ jsme definovali a pokud budeme někde v projektu získávat data od uživatelů, zajistíme si tím částečně i to, že nám nepřistanou data jiného datového typu, i když toto bychom měli ošetřovat i jinde.

Od PHP 8.0 bude možné definovat i více datových typů. To se nám může hodit například u návratové hodnoty, ta by mohla být buď true nebo chybová hláška. V takovém případě budeme moct psát následující:

class Produkt {
  public boolean|string $message;
}

 

Předchozí článek
Pokročilá konfigurace PHP (XAMPP)
Všechny články v sekci
Základní konstrukce jazyka PHP
Článek pro vás napsal kukivac
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Autor se věnuje back-end developmentu webových aplikací.
Aktivity (5)

 

 

Komentáře

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.

Zatím nikdo nevložil komentář - buď první!