Autor Zpráva
Milan1236000
Profil
Zdravím,
je nějaký rozdíl mezi
$promenna=1;
if($promenna==1) echo "1"; else echo "0";
---
$promenna="1";
if($promenna=="1") echo "1"; else echo "0";
---
$promenna="1";
if($promenna==1) echo "1"; else echo "0";
---
$promenna=1;
if($promenna=="1") echo "1"; else echo "0";
? U všech podmínek se vypíše jednička.
lionel messi
Profil
Milan1236000:

Z hľadiska výsledku nie. Operácie prebiehajú takto:

1. prípad: Porovnávaš int s int, nič nečakané sa nedeje.

2. prípad: Porovnávaš string so stringom, nič nečakané sa nedeje. (rovnaké dátové typy).

3. prípad: Porovnávaš string s int, ale jednotka na pravej strane operátora == sa automaticky pretypuje na string.

4. prípad: Takisto ako 3. prípad, len jednotka sa pretypuje na int.

Pokiaľ chceš zároveň s hodnotou porovnať aj typ, použi operátor ===.

Porovnaj:

$promenna=1;
if($promenna=="1") echo "1"; else echo "0"; //vypíše 1

verzus

$promenna=1;
if($promenna==="1") echo "1"; else echo "0"; //vypíše 0

Niekedy býva žiaduce použiť operátor === pretože potrebuješ napríklad odlíšiť int a boolean (napr. 0 a false).

Pozri sa na funkciu strpos, ktorá vracia 0, ak bol podreťazec nájdený na začiatku reťazca a false, ak nebol nájdený vôbec. Keby si v podmienke pracujúcej s výsledkom tejto funkcie použil ==, nevedel by si tieto dva prípady od seba odlíšiť (všimni si tiež varovanie v manuáli).

Ohľadne prípadov 3 a 4 vyššie z [#1] si nie som istý, v akom poradí presne prebieha pretypovanie (či sa v skutočnosti pretypuje výraz na pravej alebo ľavej strane porovnania), pre účely jednoduchého vysvetlenia to nevadí, ak sa náhodou mýlim, ospravedlňujem sa. Prosím skúsenejších kolegov o prípadnú korekciu.
_es
Profil
Milan1236000:
V dokumentácii PHP máš rôzne porovnávacie operátory vysvetlené: secure.php.net/manual/en/language.operators.comparison.php - určite je k tomu niekde aj niečo v češtine. Okrem operátora == existuje aj operátor ===.
Milan1236000
Profil
Jasně, díky.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0