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říkaz print, ale rovnou funkci var_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 hodnotou 3.
  • 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.

Copyright © 2011-2018, Squelle Group, s.r.o., Drupal web, konzultace, školení a šablonování. • Obchodní podmínkyKontakty