NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Proč nefunguje podmínka s negací

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:6.11.2017 11:26

Ahoj, od rána si lámu hlavu nad jednou podmínkou ve funkci, která je napsaná takto:

class Config {
    static public $opt = 'test';
    ...
}
-------------------------------------------------------------------
protected function kontrolaUdaju() {
    if (Config::$opt != 'live' or Config::$opt != 'test'){
       exit('Chyba ....')
    }

Funkce skončí chybou ale když přehodím != na == tak už se mi ta podmínka chová správně:

protected function kontrolaUdaju() {
    if (Config::$opt == 'live' or Config::$opt == 'test'){
        echo 'OK!';
    } else {
        exit('Chyba...');
    }

Poradí někdo co přehlížím? proč to tak je?

 
Odpovědět
6.11.2017 11:26
Avatar
Odpovídá na Ondřej Pech
Martin Konečný (pavelco1998):6.11.2017 11:39

Ahoj,
podmínka OR znamená "nebo", čili stačí, aby jen jedna z podmínek byla splněna. Pokud máš

$opt = "test";

a podmínku

$opt == "live" or $opt == "test"

pak stačí, aby se $opt bylo "live" NEBO "test". U negace to funguje úplně stejně, jen se ti prohodí pravdivostní hodnota (true / false). Ve tvém případě teda stačí, aby hodnota $opt nebyla "live" NEBO "test". Jinými slovy pokud máš podmínku

$opt != "live" or $opt != "test"

tak ti ta podmínka projde vždycky, protože ta proměnná nemůže nabývat zároveň "live" i "test" :D
Řešení tedy je místo OR použít AND

if (Config::$opt !== "live" and Config::$opt !== "test") {
        exit("Chyba...");
}
Editováno 6.11.2017 11:40
Nahoru Odpovědět
6.11.2017 11:39
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Ondřej Pech
Martin Konečný (pavelco1998):6.11.2017 11:43

Teď jsem omylem udělal chybu já a nejde mi to již editovat :D
Ve tvém případě stačí, aby hodnota $opt nebyla "live" A ZÁROVEŇ "test". Tzn. pokud nenabývá ani jedné z těchto hodnot, pak program skončí chybou.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
6.11.2017 11:43
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:6.11.2017 12:24

Díky

 
Nahoru Odpovědět
6.11.2017 12:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.