Porovnávání
Školení, která pořádám
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.
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 rovnosti
protož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.