Základní kurz 8: Operátory

Autor: again
V současné době, kdy už umíte vytvářet a inicializovat proměnné, vás určitě také bude zajímat, jak s nimi pracovat. K tomuto účelu slouží právě operátory, což jsou speciální příkazy, které pracují (provádí operace) s jednou nebo více vstupními hodnotami a poté vracejí výsledek. Vstupní hodnoty se nazývají operandy a mohou to být např: hodnoty proměnných, číselné hodnoty apod.

Samotné operace se vykonávají podle priority jednotlivých operátorů. Operátory s vyšší prioritou jsou vykonány dříve, než operátory s prioritou nižší. Obdobně je tomu třeba i v matematice, kdy má násobení přednost před sčítáním.

Operátory lze také rozdělit několika způsoby. Základní dělení spočívá v počtu operandů - proto existují tzv. unární, binární a ternární operátory, neboli operátory s jedním, dvěma a třemi operandy. Jako příklad lze uvést aritmetický operátor -, který může být jak unární (negace), tak i binární (odčítání).

Aritmetické operátory

Aritmetické operátory mají již zavedené znaménka. Setkáte se tak již s tradičními operátory pro sčítání, odčítání, násobení a dělení. Kromě nich zde naleznete také speciální operátor zbytku, který provádí dělení se dvěma operandy a jako výsledek vrací celočíselný zbytek.

Seznam aritmetických operátorů:

Aritmetické operátory se vykonávají zleva doprava a dle jejich priority (je možné dohledat v PHP dokumentaci),

Následuje několik praktických příkladů:

<?php
// výsledkem bude číslo 30, jelikož násobení má vyšší prioritu než sčítání
$vysledek = 5+5*5;

echo $vysledek; // vypíše 30

// výsledkem bude číslo 15, protože hodnota proměnné $vysledek (30) je vydělena 2
$vysledek = $vysledek/2;

echo $vysledek; // vypíše 15

// výsledkem bude číslo 10, protože od hodnoty proměnné $vysledek (15) je odečteno 5
$vysledek = $vysledek-5;

echo $vysledek; // vypíše 10

// výsledkem bude číslo 1, protože 10/3 je 3 a zbytek 1
$vysledek = 10%3;

echo $vysledek; // vypíše 1
?>

Operátor pro spojování řetězců

Pro spojení dvou či více řetězců (datový typ string) se v PHP používá operátor . (tečka). V následujícím příkladě si můžete vyzkoušet spojení několika samostatných řetězců:

<?php
$uzivatel = "Petr";

// výsledný řetězec bude "Uživatel Petr má novou zprávu"
echo 'Uživatel ' . $uzivatel . ' má novou zprávu';
?>

Operátory přiřazení

Základním znaménkem, se kterým už jste se mohli setkat například u přiřazovaní hodnot k proměnným, je operátor přiřazení = "rovná se". Stejně jako v předchozím případě platí pravidlo - operandu nalevo můžete přiřadit hodnotu (výraz) na pravé straně. Kromě něj existují i další operátory přiřazení, které plní většinou početní funkci.

Seznam operátorů přiřazení:

Narozdíl od aritmetických operátorů se operátory přiřazení vykonávají zprava doleva a samozřejmě také v závislosti na jejich prioritě.

<?php
// obyčejné přiřazení hodnoty k proměnné
$jmeno = "Petr";

// výsledný řetězec bude „Petr Novák“
$jmeno .= " Novák";

// obyčejné přiřazení hodnoty k proměnné
$cislo = 5;

// proměnná $cislo nyní obsahuje hodnotu 15 (5+10)
$cislo += 10;

// proměnná $cislo nyní obsahuje hodnotu 1 (15/2 = 7 zbytek 1)
$cislo %= 2;
?>

Operátory Inkrementace/Dekrementace

Operátory inkrementace/dekrementace umožňují zvýšit/snížit hodnotu čísla o jednu jednotku.

Seznam operátorů Inkrementace/Dekrementace:

Jak můžete vidět v seznamu, tak existují vždy dva druhy (pre/post) operátorů inkrementace a dekrementace. Rozdíl spočívá pouze v tom, jestli se proměnná nejdříve inkrementuje a poté je využita její nová hodnota, nebo se nejdříve využije stará hodnota a poté se až inkrementuje. U dekrementace toto pravidlo platí obdobně. Více snad napoví následující příklad:

<?php
// proměnná $a má hodnotu 1
$a = 1;

// v této podobě se bude hodnota proměnné $a rovnat 2, stejně jako hodnota proměnné $b.
$b = ++$a;

// proměnná $a má hodnotu 1
$a = 1;

// proměnné $b je přiřazena stará hodnota proměnné $a (tedy 1)
$b = $a++;
?>

V tomto případě bude sice hodnota proměnné $a také 2, ale proměnná hodnoty $b již bude pouze 1 (u přiřazování hodnoty k proměnné $b se přiřadí stará hodnota - či-li 1 a až poté se hodnota proměnné $a inkrementuje).

Operátory porovnání

Operátory porovnání slouží k porovnání dvou hodnot. Jejich praktické využití naleznete zejména při užití podmínek (větvení), nicméně už nyní se s nimi můžete seznámit.

Seznam operátorů porovnání:

Jak můžete vidět výše, tak pro porovnávání rovnosti (nerovnosti) dvou hodnot slouží v PHP dva operátory. Běžný operátor rovnosti (==) porovnává dvě hodnoty bez ohledu na jejich datový typ, naopak tzv. operátor identity (===) kontroluje navíc shodu datových typů.

Pamatujte taky, že nelze zaměnit operátor přiřazení (=) s operátorem rovnosti (==). V takovém případě by hodnota výsledného výrazu nemusela odpovídat vaším předpokladům.

<?php
// proměnná $vek má hodnotu 12 (datový typ integer)
$vek = 12;

// vypíše bool(true), výsledkem je tedy pravda
var_dump($vek == 12);

// vypíše bool(true), výsledkem je pravda
var_dump($vek === 12);

// proměnná $vek má hodnotu 5 (datový typ string)
$vek = '5';

// vypíše bool(true), výsledkem je pravda
var_dump($vek == 5);

// vypíše bool(false), výsledkem je nepravda
// hodnoty jsou si navzájem rovné, datové typy však rozdílné (string x integer)
var_dump($vek === 5);

// proměnná $cislo má hodnotu 10
$cislo = 10;

// vypíše bool(false), výsledkem je nepravda
var_dump($cislo > 18);

// vypíše bool(true), výsledkem je pravda
var_dump($cislo < 18);

// vypíše bool(true), výsledkem je pravda
// 10 se opravdu nerovná 4
var_dump($cislo <> 4);

// vypíše bool(true), výsledkem je pravda
// 10 se opravdu nerovná 4
var_dump($cislo != 4);
?>

Logické operátory

Stejně jako operátory porovnávání, které jste mohli vidět již dříve, slouží logické operátory zejména při psaní podmínek.

Seznam logických operátorů:

Logické operátory se vykonávají zleva doprava v závislosti na jejich prioritě. První dva operátory (ve výrokové logice konjunkce a disjunkce) slouží ke spojení více dílčích výrazů, přičemž operátory and a && se liší pouze svojí prioritou, obdobně to platí také u or a ||. Nepříliš používaný operátor xor určuje zda je právě jeden výraz roven true a pomocí ! lze tento výraz negovat.

<?php
// proměnná $cislo má hodnotu 5
$cislo = 5;

// je číslo 5 prvočíslo? Proměnná $prvocislo má hodnotu true (číslo 5 je prvočíslo)
$prvocislo = true;

// je číslo 5 sudé? Proměnná $sudeCislo má hodnotu false (číslo 5 opravdu není sudé)
$sudeCislo = ($cislo%2 == 0);

// vypíše bool(false), protože číslo 5 není prvočíslo a zároveň sudé číslo (ale pouze prvočíslo)
var_dump($prvocislo and $sudeCislo);

// vypíše bool(true), protože číslo 5 je prvočíslo nebo sudé číslo (alespoň platí jedná možnost)
var_dump($prvocislo or $sudeCislo);

// vypíše bool(false), protože negace logické hodnoty true je false
var_dump(!true);
?>

Pomocí logických operátorů je samozřejmě možné poskládat dohromady libovolné množství výrazů. V níže uvedeném příkladě se o tom můžete sami přesvědčit.
<?php
$prvniCislo = 2;
$druheCislo = 13;

// proměnná $vysledek nabývá hodnoty true
$vysledek = ($prvniCislo%2 == 0) OR ($druheCislo%2 == 0);
?>

Bitové operátory

Tato nepříliš známá skupinka operátorů slouží k provádění bitových operací s čísly a řetězci na úrovni jednotlivých bitů.

Seznam bitových operátorů:

Samotné operace se provádí na vzájemně souhlasných bitech a od logických operátorů (až na >> a <<) se příliš neliší.

Obecně se bitové operátory nejvíce používají u šifrovacích algoritmů, dále pak v PHP při nastavování direktiv nebo při předávání parametrů funkcím.

Vyzkoušejte si

Vytvořte si ke každé kategorii operátorů několik příkladů, zaměřte se zejména na logické operátory a operátory porovnávání. Vyzkoušejte si a zjistěte, jestli výsledná hodnota (true/false) odpovídá vaším předpokladům.

Máte návrh na vylepšení či doplnění článku? Obsahuje článek nepřesné informace, nebo v něm chybí něco důležitého?
Tento článek má diskusní vlákno na diskusi Jak Psát Web, kam můžete náměty a připomínky napsat.


Správcem webu Péhápko.cz je Joker, mail zavináč it-joker tečka cz. Informace o autorských právech a možnostech použití obsahu viz Autorská práva
Přihlášení