Datové typy v PHP

Veškerá zpracovávaná data v PHP jsou určitého typu. Například celé číslo, řetězec nebo boolean (pravda / nepravda).

Základní datové typy

Základním typů se říká také primitivní datové typy, nebo také skalární typy.

Typ Název Popis
integer Celé číslo Obsahuje pouze celé číslo. Maximální hodnota je určena podle počtu bitů. Na 32-bitovém PHP je rozsah od -2,147,483,648 do 2,147,483,647 (~ ± 2 miliardy), 64-bitové PHP má rozsah od -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807 (~ ± 9 quintillionů). Maximální hodnotu můžeme vždy získat zavoláním konstanty PHP_INT_MAX.
float Desetinné číslo s plovoucí řádovou čárkou Jde o variantu čísla s plovoucí řádovou čárkou, pro které platí pravidlo "čím menší, tím přesnější". Číslo se interně uloží jako tzv. mantisa a exponent, takže se vlastně ukládají 2 čísla, mezi kterými se provádí operace: mantisa * (2 ^ exponent), čímž je možné uložit opravdu obří rozsah čísel. Využívá se principu, že u velkých čísel nepotřebujeme vždy znát přesně jejich hodnotu, zato chceme ušetřit co nejvíce paměti.
string Řetězec Obsahuje posloupnost znaků, které se ohraničují pomocí uvozovek nebo apostrofů. Maximální délku omezuje jen kapacita operační paměti.
boolean Logická hodnota Logická hodnota z booleovy algebry, může obsahovat pouze true (pravda) nebo false (nepravda).
null Prázdná hodnota Občas nechceme do proměnné uložit nic. Často se lze setkat například s nulou (0) nebo prázdným řetězcem (''), nicméně jen null je správné řešení.

Manuální přetypování

Některé typy lze mezi sebou převádět. Cílový datový typ se uvádí pomocí kulaté závorky a lze uvést kdekoli v aplikaci, například při výpisu hodnoty.

Například:

$pi = 3.14;

echo $pi;       // vypíše 3.14

echo (int) $pi; // vypíše 3

Dynamické přetypování

Mějme následující 2 proměnné:

$x = 10;
$y = '10';

Jaký je rozdíl mezi obsahy proměnných $x a $y?

Proměnná $x je číslo, $y je řetězec (obsahující znak "1" a "0"), tedy v případě, že proměnnou pouze uložíme do paměti a nebudeme provádět nějakou operaci, která bude mít vliv na hodnotu. Například následující 2 zápisy budou vracet stejný výsledek:

echo $x + 5;	// vypíše 15
echo $y + 5;	// vypíše 15

V druhém případě dojde k takzvanému dynamickému přetypování, tj. proměnná převede svůj datový typ tak, aby bylo možné s ní provést výpočetní operaci. Na toto chování se nelze vždy spolehnout a jedná se spíše o korektivní chování, co má za úkol opravit špatně napsané scripty začátečníků. Pokud to je možné, tak čísla vždy zapisujte s datovým typem pro uložení čísel, protože se tím zvyšuje jejich přesnost a usnadňuje se budoucí použití.

Poznámka: Je potřeba si uvědomit, že nemůžeme převádět datové typy úplně libovolně a ne vždy je to tedy možné. Pokud budete přetypovávat datový typ na nějaký jiný (nekompatibilní) tak nemusí buď dojít k převodu vůbec, nebo se může původní obsah poškodit, či zcela zničit a nahradit za jiný. Pokud například budete přetypovávat řetězec na celé číslo (a v proměnné bude uložen nějaký text, který není číslem), tak bude místo číselné hodnoty do proměnné uložena hodnota 1.

Porovnávání typů

Při porovnávání hodnot je potřeba brát v potaz různé datové typy.

Obecně operátor == slouží pro obecné porovnání dvou hodnot (bez ohledu na typy), zatímco === porovnává hodnoty i datový typ.

Například:

$a = '';
$b = null;

if ($a == $b) {
	// Bude vyhodnoceno jako TRUE, protože
	// dojde k převodu datového typu.
}

if ($a === $b) {
	// Provede mnohem přísnější validaci
	// a neprojde, protože jde o jiný
	// obsah a jiný datový typ, proto se
	// tento kód nikdy nespustí.
}

Potřebujete poradit s PHP?

Nabízím trénink vývojářů, konzultace, školení a analýzu návrhových vzorů. Osobně v Praze nebo přes Skype.

Napište mi na mail jan@barasek.com a domluvíme si schůzku.

Pomohl Vám tento článek?

TopList counter