Autor Zpráva
dtuz
Profil *
Čo znamená, ak if nemá operátor porovnania?
if($a) {

}
Je to to isté ako if($a != false) ?
juriad
Profil
To explicitly convert a value to boolean, use the (bool) or (boolean) casts. However, in most cases the cast is unnecessary, since a value will be automatically converted if an operator, function or control structure requires a boolean argument.
http://www.php.net/manual/en/language.types.boolean.php
Spíš je to
if ((bool) $a)
Kubo2
Profil
dtuz:
Čo znamená, ak if nemá operátor porovnania?
Vyhodnotí sa takisto, ako keby ho tam mal. Ale predsa len to nie je úplne to isté. Vetviaca štruktúra if sa rozhoduje na základe logickej hodnoty, ktorá je výsledkom operácií medzi guľatými zátvorkami, teda napríklad aj výrazu porovnania. Hodnotou tohoto výrazu je vzhľadom na (ne)rovnosť operandov buď logická hodnota true alebo false. if vyhodnotí nasledujúci príkaz (ktorým je vlastne aj blok kódu medzi zátvorkami { a }), ak výstupná hodnota všetkých operácii v zátvorkách je logická pravda, teda true.

K tvojmu príkladu:
Vzhľadom na to, že premenná $a obsahuje nejakú hodnotu, ktorá bude pri pretypovaní vyhodnotená ako true alebo false, sa vykoná nasledujúci blok kódu (podrobnejšie som to opísal v predchádzajúcom odstavci).

Je to to isté ako if($a != false) ?“*
Odpoveď teda znie: Áno, je to to isté. V uvedenej podmienke totiž porovnávaš aktuálnu hodnotu premennej s hodnotou false, čo sa pri neexistencii premennej (samozrejme s vygenerovaným E_NOTICE) či priradení neprázdnej hodnoty do premennej vyhodnotí ako true, inak ako false — to isté sa implicitne stane, ak if-u poskytneš samotnú hodnotu premennej $a.

* Pred otáznikom sa nepíše medzera, mysli na to prosím.
Joker
Profil
dtuz:
Je to to isté ako if($a != false) ?
Ve výsledku ano, i když mi přijde srozumitelnější tu podmínku otočit: Je to stejné, jako if ($a == true)

Neboli: Příkaz if zadanou podmínku převede na typ boolean a zkontroluje, jestli hodnota je true.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0