Autor Zpráva
youkon
Profil *
Ahoj, nevíte proč se to děje?

Mám nějakou funkci, např.

function overData ($prvni = false, $druha = false, $treti) {
if(isset($prvni))
return 'je tam prvni!';

if(isset($treti))
return 'je tam treti!';
}


a zavolám si funkci takhle:

echo overData(false, false, 'neco tam bude');

Vypíše to kromě je tam treti!, což se očekává, i je tam prvni!

jak to, když to je false, tedy testuju to na isset a nemělo by tam tedy být?

Když ve funkci zaměním
if(isset($prvni))
za
if($prvni)
nebo za
if($prvni != false)
, tak už to vypíše jen třetí.
Timy
Profil
youkon
„false je taky hodnota?“
Ano :-).
youkon
Profil *
hmm, takže předělat celej server :( dřív to ale bralo, že když false, tak nic, až nová verze php
BetaCam
Profil
youkon

No máš dost možností mě ted napadaj dvě : bud místo isset() dát empty() nebo místo FALSE posílat NULL
youkon
Profil *
díky, null vypadá dobře
Warden
Profil
isset() kontroluje pouze, zda je proměnná inicializovaná, což je jako formální parametr funkce, to, že má hodnotu false, isset() nezajímá
BetaCam
Profil
Warden

isset() kontroluje pouze, zda je proměnná inicializovaná, což je jako formální parametr funkce, to, že má hodnotu false, isset() nezajímá

Naopak FALSE ji zajímá, ale NULL jí nechává ledově klidnou :)
Warden
Profil
To je otázka, jak se na problém díváme :-) Kdybych ji neinicializoval na false, tak se inicializuje náhodnou hodnotou a isset se vyhodnotí jako true pokaždé. isset() by se vyhodnotila jako false, pokud by proměnná nebyla nikde definována. Tim, že jí přiřadím hodnotu null jí nastavuji jako neplatnou, proto se isset() chová tak, jak potřebujeme :-) Každopádně problém je vyřešen a není třeba se rozepisovat :-)

Ještě dodám, to, že je v proměnné false, ji opravdu nezajímá...může v ní být false, true, 0, 1, "blablabla", nebo cokoliv jiného a podmínka bude bude vždy vyhodnocena jako true, protože isste() neřeší obsah, ale "existenci" :-)
Mastodont
Profil
http://www.blueshoes.org/en/developer/php_cheat_sheet/

:)

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