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
print
jsme vypsali proměnnou$theme
a 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é
$result
jste nejprve přiřadili hodnotu proměnné$var1
a 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.