NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 15 - Datové typy v PHP

V předešlém cvičení, Řešené úlohy k 14. 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 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 textový řetězec, 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 brány 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

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
taky 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ůž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.

$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 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í desetinnou čá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;

Jak už bylo vysvětleno výše, jakákoliv operace s typem float nám vrátí výsledek 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 jakkoliv 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). 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 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 říkáme asociativní pole a to z důvodu, že asociujeme jednotlivé položky ke klíčům.

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

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

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

Datový typ 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, celé číslo
  • (bool), (boolean) - Boolean, logická hodnota
  • (float), (double), (real) - Float, desetinné číslo/reálné
  • (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 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 textové řetězce. 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ů";  // Výsledek - 10 (Od verze PHP 8 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 č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í, 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 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 $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 nám nepřistanou 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ď na hodnotě true nebo chybová hláška. V takovém případě budeme moct 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 14. 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í:
186 hlasů
Autor se věnuje back-end developmentu webových aplikací.
Aktivity