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?

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: Reakce na: Leo

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.
avatar © 2005-2019 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.