Práce s proměnnými; operátory
Jste zde
Nyní rozvineme příklad s globální proměnnou $theme.
Cílem bude vypsat proměnnou ve větě typu Právě používáte téma vzhledu se strojovým názvem...
To uděláme následovně:
GLOBAL $theme; print 'Právě používáte téma vzhledu se strojovým názvem' . ' ' . $theme '.';
Podívejme se, z čeho se skládá tento skript a proč:
- Na začátku jsme získali globální proměnnou
$theme(znáte z předchozího kapitoly). - Příkazem
printjsme vypsali proměnnou$themea tři textové řetězce: část věty, mezeru a tečku.
Všechny textové řetězce, je nutné oddělit apostrofy. - Jednotlivé vypisované hodnoty je pro PHP potřeba spojit. Zde jste se seznámili s jedním z dalších operátorů - tečkou (
.). Je to tzv. řetězcový operátor, který spojí dva řetězce dohromady. - Mezeru byste mohli teoreticky napsat rovnou spolu s předchozím textem, ale nedělejte to, už proto, že řetězce standardně musí být k dispozici k překladu (mezera by pak zcela nelogicky byla součástí překládaného řetězce).
Pro práci s proměnnými existuje řada dalších operátorů. Nebudeme zde uvádět všechny (najdete je v manuálu PHP), budeme se s nimi seznamovat postupně na příkladech.
V následujícím příkladu si vyzkoušíme sčítání celočíselných proměnných (typ integer).
$result = 5; $result = $result + 4; print $result;
- Výsledek je
9. - Všimněte si, že hodnota proměnné se v průběhu vykonávání skriptu může měnit.
- Pro sčítání používáme operátor
+.
Výše uvedený způsob zápisu sice funguje, ale většinou se s ním nesetkáte. Obvykle se ke stejnému účelu používá přiřazovací operátor +=. Vyzkoušejte:
$result = 5; $result += 4; print $result;
- Výsledek je
9. - Zápis
$result += 4;říká, že původní hodnota proměnné se má navýšit o 4.
Podobně můžete používat další aritmetické operátory, které znáte z matematiky:
+sčítání
-odčítání*násobení/dělení%zbytek
Stejně jako v matematice platí přednost násobení a dělení před sčítáním a odčítáním a také používání kulatých závorek.
$result = (5+3) / 2; print $result;
- Výsledek je
4.
Téměř stejně jako v matematice můžete hodnoty také porovnávat.
$var1 = 5; $var2 = 3; $result = $var1 > $var2; var_dump($result);
- Protože předpokládáme, že výsledek bude typu boolean (
TRUE/FALSE), nepoužíváme k výpisu příkazprint, ale rovnou funkcivar_dump(). - Výsledkem je
bool(true). - První část výsledku je označením boolean hodnoty v PHP, tedy
bool, část v závorce je hodnota.
Podobně vyzkoušejte:
$var1 = 5; $var2 = 3; $result = $var1 < $var2; var_dump($result);
- Výsledkem je
bool(false).
Pozor na rozdíl mezi porovnáním a přiřazením.
Když chcete zjistit, zda se hodnoty rovnají, existuje důležitý rozdíl oproti běžnému matematickému zápisu. Pokud byste použili operátor = jako v matematice, nedojde k porovnání hodnot, ale k přiřazení.
= je totiž přiřazovací operátor, což už jste vyzkoušeli:
$my_variable = 'Ahoj Světe';
Pokud chcete zjistit, zda se hodnoty proměnných rovnají, musíte použít operátor ==.
Vyzkoušejte:
$var1 = 5; $var2 = 5; $result = $var1 == $var2; var_dump($result);
- Výsledkem je
bool(true).
$var1 = 5; $var2 = 3; $result = $var1 == $var2; var_dump($result);
- Výsledkem je
bool(false).
Dále vyzkoušejte, co se stane, když uděláte chybu a napíšete operátor = namísto ==:
$var1 = 5; $var2 = 3; $result = $var1 = $var2; var_dump($result);
- Výsledek je
int(3), tedy celé číslo (integer) s hodnotou3. - Proměnné
$resultjste nejprve přiřadili hodnotu proměnné$var1a hned poté hodnotu proměnné$var2.
Kromě toho jste však změnili i hodnotu proměnné $var1 (i té jste přiřadili hodnotu proměnné $var2), což si můžete snadno ověřit:
$var1 = 5; $var2 = 3; $result = $var1 = $var2; var_dump($var1);
- Výsledek je
int(3).
Je to poměrně častá chyba, která může mít následky i pro bezpečnost (například výše zmíněná záměna uživatelů při použití globální proměnné Drupalu $user): místo abyste hodnoty porovnali a zjistili výsledek, dojde k přiřazení.
Často se setkáte také s operátorem ===, který porovnává jak hodnoty proměnných, tak jejich datové typy.
Práce s řetězci
Poměrně specifická je práce s řetězci. Například jejich porovnávání je (pochopitelně) mnohem složitější a slouží k němu mnoho speciálních funkcí.
Zde si jen řekneme, že pro zjištění rovnosti můžete použít operátor == stejně jako u čísel:
$var1 = 'Ahoj'; $var2 = 'Ahoj'; $result = $var1 == $var2; var_dump($result);
- Výsledkem je
bool(true).
Spojování řetězců už jste vyzkoušeli, zopakujte si obdobu příkladu:
$var1 = 'Ahoj'; $var2 = 'Světe!'; $result = $var1 . ' ' . $var2; print($result);
- Výsledek:
Ahoj Světe!
Kromě toho je však možné použít přiřazovací operátor .=, který funguje obdobně jako +=code:
$var1 = 'Ahoj'; $var1 .= ' '; $var1 .= 'Světe!'; print($var1);
- Výsledek:
Ahoj Světe! - Operátor
.=přiřadí vždy následující řetězec k předchozímu, a to z pravé strany.
