Autor Zpráva
quatzael
Profil
Nevíte někdo náhodou jakou hodnotu preg_match ve skutečnosti vyhazuje?

Všude vidím v kódech něco takovýho:

if(preg_match($pattern,$string))

Ale v dokumentaci píšou, že to hází 1 pro kladný výsledek a 0 pro záporný. False jenom když je ta, nějaká chyba..
Taps
Profil
quatzael:
a ty máš konkrétně jaký problém ?
Kubo2
Profil
quatzael:
To, čo píšu v dokumentácii, je svätá pravda. To, čo vidíš v kódoch, sa dá použiť, pretože PHP je dynamicky typovaný jazyk, čo znamená, že hodnota sa podľa kontextu pretypuje na požadovaný typ. Nenulová (aj záporná) hodnota sa v PHP pri použití v podmienke pretypuje na true, čo znamená, že sa podmienka splní.
Pri regulárnych výrazoch väčšinou nechceš vedieť, či došlo k možnej chybe, ale či reťazec zodpovedá maske alebo nie, preto ti je jedno či funkcia vráti 0 alebo false, takže táto podmienla je dostačujúca.
Str4wberry
Profil
Takhle PHP funguje. Zkuste třeba:

$promenna = 1;

if ($promenna) {
    echo "Test";
}

V PHP platí 1 == true nebo 0 == false.

Má-li se 1 a true rozlišovat, slouží k tomu ===.
DarkMeni
Profil
quatzael:
Ale v dokumentaci píšou, že to hází 1 pro kladný výsledek a 0 pro záporný. False jenom když je ta, nějaká chyba..

Tak sis odpověděl, a je to tak - když výraz bude souhlasit s testovaným řetězcem, tak ta funkce vrátí (int) 1, když ne, tak (int) 0 a když bude ve výrazu nějaká chyba tak (bool) false a myslim že to snad vyhodí i chybu E_NOTICE nebo E_WARNING

A v podmínce
if(preg_match($pattern,$string))
se pak jen testuje jestli je výsledek pravdivý nebo ne
true je jako pravda a false je jako nepravda

Jinak cokoliv nenulovýho se vyhodnocuje jako true, a 0 jako false (myslim že i prázdný řetězec je taky jako false)
takže podmínka if(1) (ale klidně i třeba if(3) nebo if(-5)) je jako if(true)
a podmínka if(0) je jako if(false)


Vlastně to máš tady popsaný:
Converting to boolean
Kubo2
Profil
Taps:
On zrejme trpí neznalosťou implicitného pretypovania, a to je dosť veľký problém :-)
quatzael
Profil
Díky za odpovědi. Jen jsem se chtěl ujistit, jestli to tak bude určitě v pořádku.
Kubo2
Profil
DarkMeni:
A if(-1) je tiež ako if(true).
quatzael
Profil
Kubo2:
Jojo. To už tady psal [#5] DarkMeni..
Kubo2
Profil
quatzael:
Ospravedlňujem sa, prehliadol som to. Ale písal som to tu už v [#3].

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: