Porovnávání
V PHP je k dispozici několik porovnávacích operátorů. Kromě standardního porovnání == existuje také operátor identity ===, který kromě hodnoty porovná i typ operandů (jinak se typ automaticky převede). Používá se hlavně tehdy, když funkce může vrátit false v případě neúspěchu nebo platnou hodnotu, která se na false může převést. Tak se chová např. funkce strpos.
<?php // špatně - a je nalezeno na 0. pozici, což se vyhodnotí jako false if (strpos("abc", "a")) { // nalezeno } // správně if (false !== strpos("abc", "a")) { // nalezeno } ?>
Operátor identity lze použít i při kontrole formulářových dat:
<?php if ($_POST["prijem"] === "") { echo "Vyplňte prosím příjem.\n"; } ?>
Málokdo ví, že operátory porovnání se dají použít i u polí.
V SQL je situace jednodušší, k porovnání se používá operátor =. Pozor je ale potřeba dát na hodnotu NULL, která znamená neznámé. Pokud tedy porovnáte NULL = NULL
, dostanete opět NULL a ne pravdu, jak byste možná čekali. K porovnání s hodnotou NULL se dá použít operátor IS NULL nebo <=>.
Diskuse
Kluk:
Spis tedy:if (false === strpos("abc", "a")) {
// nenalezeno
}
pac :
If needle is not found, strpos() will return boolean FALSE.
Jakub Vrána
:
Díky za upozornění, opravil jsem to.


Leo:
Nejak mi to asi nemysli, ale proc se musi pro kontrolu formularovych dat pouzit operator identity misto rovnosti?Jakub Podhorský:
osobně si myslím že v případě formůlářů je lepší používat právě operator rovnostiprotože pokud mi někdo z formu pošle číslo tak se tuším chová správně jako string
Mordae:
A co když Vám někdo pošle foo[]=1, foo[]=2, tedy pole? Potom dokáže program pěkně házet chyby.Testnete totiž isset($_REQUEST['foo']) && $_REQUEST['foo'], že? A pak Váš skript zkolabuje třeba na srtpos($_REQUEST['foo'], 'a')...
Jakub Podhorský:
to máte pravdu a díky za poučení...člověk se pořád má co učit a na pole jsem opravdu doslova zapoměl :(jinak nepoužívatm $_REQUEST ale $_GET a $_POST
navíc pokud by mi někdo poslal pole tak jediný co se stane že mi script skončí chybou...nic jinýho i když taky mi to vadí :/
Jakub Vrána
:
Pokud by příklad místo toho obsahoval podmínku <?php !$_POST["prijem"] ?> nebo <?php $_POST["prijem"] == "" ?>, tak by uživatel nemohl vyplnit příjem 0.


Diskuse je zrušena z důvodu spamu.

