NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 16 - Datové typy v PHP

V předešlém cvičení, Řešené úlohy k 15. lekci PHP, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

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 se to tak trochu liší od ostatních jazyků.

Dynamické typování

Jde prakticky o alfu a omegu 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. Pokud tedy do proměnné vložíme textový řetězec, PHP bude tuto proměnnou považovat za datový typ string.

Z kontextu se datový typ rozpozná také při operacích, příkladem čehož 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 i výsledek budou brány také jako 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

Typ 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 textový řetězec";
$string2 = 'Já jsem
také textový řetězec';

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

Integer

Další datový typ je integer, zkráceně také nazývaný int. Jedná se o 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ákoli deklarace proměnné s číslem bez desetinné čárky je tedy automaticky považována za int.

Pokud však s takovou proměnnou provedeme 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.

$int = 5   // proměnná je int
$int2 = 2   // proměnná je také int
$float = 5.0 // proměnná je typu float
$int/$int2 // int/int - výsledek se nám vrátí jako datový typ float
$int/$float // int/float - výsledek, ačkoli je celočíselnou hodnotou, se nám také vrátí jako float

Float

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

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

$float = 1.23;

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

Boolean

Datový typ 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 jakkoli velkými či malými písmeny:

$pravda = tRue;  // reprezentuje hodnotu true
$nepravda = fALSe; // reprezentuje hodnotu false

Nejčastěji se typ boolean využívá v podmínkách (if). Chceme-li porovnat logickou hodnotu a chceme-li zaručit pravdivost datového typu, musíme místo dvojitého rovnítka == použít rovnítko trojité ===. Takové porovnání kromě hodnoty porovná i 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 takto:

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

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

Pole je v PHP uspořádanou mapou klíčů a jejich hodnot. Na rozdíl od jiných jazyků, kde je pole pouze souhrnem 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 nemusíme používat pouze indexy pro přístup k jednotlivým položkám. Příkladem pole s položkami různých datových typů by bylo pole, do ně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 funkcí var_dump($pole) vypadalo následovně:

array(3) {
   [0]=> string(45) "první hodnota pole bez definovaného klíče"
   ["jméno"]=> string(37) "druhá hodnota pole s klíčem jméno"
   [5]=> int(34)
}

Tomuto případu říkáme asociativní pole, a to z důvodu, že asociujeme jednotlivé položky s klíči.

Abychom přistoupili k druhé položce (s klíčem jméno), napsali bychom:

$jmeno = $pole["jméno"];

Object

Dalším datovým typem 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. Definice objektu a přístup k jeho vlastnostem vypadá takto:

$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

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

Přetypování

Proměnnou deklarovanou s určitým datovým typem můžeme stále přetypovat na jiný datový typ. Slouží nám k tomu prefixy ve znění datových typů:

  • (int), (integer) – Int, celé číslo;
  • (bool), (boolean) – Boolean, logická hodnota;
  • (float), (double), (real) – Float, desetinné/reálné číslo;
  • (string) – String, textový řetězec;
  • (array) – Array, pole;
  • (object) – Object, objekt;
  • (unset) – Null, prázdná hodnota.

Od verze PHP 8 již není k dispozici unset jako prefix, ale pouze jako funkce unset().

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

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

Resetování proměnné funkcí unset() se provádí způsobem níže:

$int = 10;
unset($int); // proměnná $int je nyní nedefinovaná

echo(gettype($int)); // vypíše "NULL", ale zároveň vyvolá varování o nedefinované proměnné

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 pro tuto lekci jsou příliš obsáhlá.

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 textové řetězce. Pro sčítání se používá operátor plus +, pro přidávání znak tečky ..

Pokud použijeme sčítání, PHP oba operandy vyhodnotí jako čísla a pokusí se je sečíst. Pokud bychom sčítali string a číslo, proběhne sčítání na základě hodnoty daného řetězce string, 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 k typu string. Ukážeme si nějaké příklady sčítání a přidávání:

$a = 5 + "5 kluků";  // Výsledek - 10 (Od verze PHP 8 postup vyvolá varování o nečíselné hodnotě v řetězci.)
$b = 5 + 6.5;        // Výsledek - 11.5
$c = "Ahoj" . "světe"; // "Ahojsvěte"
$d = "Ahoj" . 5;       // "Ahoj5"

Statické typování

Co to? Statické typování? Výše v lekci bylo sice zmíněno, že PHP typuje datové typy dynamicky, někdy se nám však mohou hodit vlastnosti statického typování, které jsou dostupné 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 např. hodit, pokud víme, že $object->produkty má být pole s produkty nebo že $object->cena má být vždy cena, takže chceme použít datový typ float.

V praxi by to vypadalo takto:

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

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 se k nám nedostanou data jiného datového typu, i když toto bychom měli ošetřovat i jinde.

Od verze PHP 8 je možné definovat i více datových typů. To se nám může hodit například u návratové hodnoty, která by mohla být buď hodnotou true, nebo chybovou hláškou. V takovém případě budeme moci psát následující:

class Produkt {
  public boolean|string $chyba;
}

V příští lekci, Tvorba vlastních funkcí v PHP, si ukážeme, jak v PHP deklarovat vlastní funkce.


 

Předchozí článek
Řešené úlohy k 15. lekci PHP
Všechny články v sekci
Základní konstrukce jazyka PHP
Přeskočit článek
(nedoporučujeme)
Tvorba vlastních funkcí v PHP
Článek pro vás napsal kukivac
Avatar
Uživatelské hodnocení:
199 hlasů
Autor se věnuje back-end developmentu webových aplikací.
Aktivity