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 <=>.

Jakub Vrána, Výuka, 26.8.2005, diskuse: 7 (nové: 0)

Diskuse

Kluk:

Spis tedy:

if (false === strpos("abc", "a")) {
    // nenalezeno
}
pac :
If needle is not found, strpos() will return boolean FALSE.

ikona Jakub Vrána OpenID:

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 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í :/

ikona Jakub Vrána OpenID:

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.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.