Autor Zpráva
kiksl
Profil *
je lepší
if($promena=="")...

nebo
if(!$promena)...
juriad
Profil
To první předpokládá, že proměnná obsahuje řetězec.
To druhé předpokládá, že proměnná obsahuje logickou hodnotu.

A samozřejmě, že kvůli php.net/manual/en/language.types.type-juggling.php a php.net/manual/en/types.comparisons.php projde skoro vše. Ale není dobrou praxí na to spoléhat. To, že v PHP lze programovat jako prase neznamená, že se to tak má dělat.
Když proměnná obsahuje číslo 0 nebo dokonce řetězec "0", tak první podmínka neprojde, druhá ano.

Joker, díky za opravu. V každém případě není to zcela intuitivní a není dobré na to spoléhat, protože se v tom snadno udělá chyba. Jsem důkazem.
Joker
Profil
kiksl:
Ani jedno není lepší, to je asi jako otázka, jestli je lepší if ($promenna == 2) nebo if ($promenna == 3).

To první kontroluje, zda v $promenna je prázdný řetězec, nebo ekvivalentní hodnota jiného datového typu.
To druhé kontroluje, zda v $promenna je false, přičemž hodnota v $promenna není typu boolean, nejdřív se konvertuje.

juriad:
Když proměnná obsahuje číslo 0 nebo dokonce řetězec "0", tak první podmínka neprojde, druhá ano.
Jen poopravím, jediný rozdíl je řetězec "0", číslo 0 projde i tou první.
snazimse
Profil
Joker:
Jen poopravím, jediný rozdíl je řetězec "0", číslo 0 projde i tou první.
Moderátor Joker: Nahradil jsem [pre] za normální citaci


Tak to je trochu šílenost ne? Ikdyž kdybych to chtěl někde uložit do string formátu, tak se to možná hodí, ale dělá to asi trochu nepořádek.
Amunak
Profil
snazimse:
Šílenost to je, ale díky přetypování to tak funguje. Ostatně taky proto je vhodné vždy používat "identitu", tedy === místo ==. Podmínku bez operátoru, tedy jen if($promenna) je vhodné používat jen tehdy, kdy je $promenna striktně typu boolean.

Pro všechny ostatní případy jde použít nějaké jiné, vhodnější a čitelnější porovnání.
snazimse
Profil
Souhlasím, proto právě, by to mělo fungovat pouze jen s operátorem === Když tedy chci porovnávat více datových typů.
Joker
Profil
snazimse:
by to mělo fungovat pouze jen s operátorem ===

S operátorem === to právě nefunguje, resp. neplatí, že 0 === "0".

A možná ještě kiksl ve skutečnosti hledá empty nebo isset.

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